1. 程式人生 > >python--9、進程及並發知識

python--9、進程及並發知識

減少 多核 source 空間 -- 返回 進行 pcb line

進程

一個文件的正在執行、運行過程就成為一個進程。
執行多個程序,把程序文件都加載到內存,並且多個程序的內存空間隔離--空間上的復用。 遇到IO等待,切CPU到別的程序,提升效率。沒有IO,一個程序占用CPU過久也要切換,效率變低--時間上的復用。
為了讓所有程序員都覺得自己獨占計算機資源,多個終端聯機讓他看起來沒問題,並且采用多道技術,所有的終端很小概率會同事都在執行指令,。
###分時操作系統。
為了提高效率,寫程序時盡量減少IO。
保存狀態+切換

進程基本特征:動態性、並發性、獨立性、異步性和結構特征。
進程結構上包括:程序段、數據段、進程控制塊PCB(Process Control Block)組成。PCB是進程存在的唯一標識。系統通過PCB對進程進行控制和管理。
為了方便進程的調度和管理,需將各進程的PCB以適當方法組織起來。常見的有鏈接方式和索引方式。
鏈接方式就是形成隊列,如就緒隊列、阻塞隊列。
索引就是將同一狀態的進程組織在一個索引表中,如就緒索引表、阻塞索引表。
進程基本狀態:阻塞、就緒、運行。引起狀態轉化的事件有:IO操作和占用CPU時間時間過久。
進程的阻塞與喚醒:
阻塞:執行轉阻塞,喚醒:阻塞轉就緒。阻塞是進程自己主動的,喚醒是被動由其他進程喚醒的。

並發編程

下載好的程序就是一堆文件。
一個操作系統上跑多個軟件,共享硬件。軟件對硬件資源的競爭歸系統管,把競爭變得有序化。

並發與並行

無論是並行還是並發,在用戶看來都是‘同時‘運行的,不管是進程還是線程,都只是一個任務而已,真是幹活的是cpu,cpu來做這些任務,而一個cpu同一時刻只能執行一個任務

一 並發:是偽並行,即看起來是同時運行。單個cpu+多道技術就可以實現並發,(並行也屬於並發)

二 並行:同時運行,只有具備多個cpu才能實現並行

單核下,可以利用多道技術,多個核,每個核也都可以利用多道技術(多道技術是針對單核而言的

有四個核,六個任務,這樣同一時間有四個任務被執行,假設分別被分配給了cpu1,cpu2,cpu3,cpu4,

一旦任務1遇到I/O就被迫中斷執行,此時任務5就拿到cpu1的時間片去執行,這就是單核下的多道技術

而一旦任務1的I/O結束了,操作系統會重新調用它(需知進程的調度、分配給哪個cpu運行,由操作系統說了算),可能被分配給四個cpu中的任意一個去執行      

操作系統的作用:
  • 隱藏硬件接口,提供好的抽象接口
  • 管理、調度進程,並且將多個進程對硬件的競爭變得有序。

多道技術
  • 空間復用:多個程序的文件同時讀入內存並且做到隔離
  • 時間復用:把CPU的時間平均分配給每一個進程,或者 在進程IO時利用這一段IO等待時間運行別的進程

並發與並行

  • 並發、一個CPU利用多道技術實現看起來多個同時運行
  • 並行、多核心的CPU同時運行多個程序,一個核心對應一個程序

同步

提交一個任務後,在原地等著,等到該任務運行完畢,拿到結果以後,再執行下一行代碼。--會導致程序變為串行執行(.result())

異步

提交一個任務後,不會等著,直接執行下一行代碼。,--並行的提交任務,容器存儲每個任務的狀態,等進程池完畢後,再取結果。

阻塞

#阻塞調用是指調用結果返回之前,當前線程會被掛起(如遇到io操作)。函數只有在得到結果之後才會將阻塞的線程激活。有人也許會把阻塞調用和同步調用等同起來,實際上他是不同的。對於同步調用來說,很多時候當前線程還是激活的,只是從邏輯上當前函數沒有返回而已。
#舉例:
#1. 同步調用:apply一個累計1億次的任務,該調用會一直等待,直到任務返回結果為止,但並未阻塞住(即便是被搶走cpu的執行權限,那也是處於就緒態);
#2. 阻塞調用:當socket工作在阻塞模式的時候,如果沒有數據的情況下調用recv函數,則當前線程就會被掛起,直到有數據為止。

非阻塞

非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前也會立刻返回,同時該函數不會阻塞當前線程。

總結

1. 同步與異步針對的是函數/任務的調用方式:同步就是當一個進程發起一個函數(任務)調用的時候,一直等到函數(任務)完成,而進程繼續處於激活狀態。而異步情況下是當一個進程發起一個函數(任務)調用的時候,不會等函數返回,而是繼續往下執行當,函數返回的時候通過狀態、通知、事件等方式通知進程任務完成。

2. 阻塞與非阻塞針對的是進程或線程:阻塞是當請求不能滿足的時候就將進程掛起,而非阻塞則不會阻塞當前進程
    
必會知識:
#操作系統:為了方便操作、管理硬件
#所有一切都是為了解放人力。
計算機組成原理、操作系統原理、一門語言、網絡(協議知識)、數據結構。

python--9、進程及並發知識