1. 程式人生 > >python-同步和非同步、阻塞和非阻塞、序列和並行、並行和併發、密集型、執行緒和程序的相關概念

python-同步和非同步、阻塞和非阻塞、序列和並行、並行和併發、密集型、執行緒和程序的相關概念

1. 同步和非同步

  關注的是訊息的通訊機制,描述的是一種行為方式,是多個任務之間的關係。

① 同步: 呼叫者主動等待被呼叫方返回結果,在沒有返回結果之前,就一直專職等待。

千萬不要把計算機中“同步”理解成“同時執行”。

② 非同步:呼叫者傳送請求請求,不會專職等待被呼叫方返回結果,當被呼叫方有結果之後,再通知呼叫者,再繼續執行剛才的任務。

2. 阻塞和非阻塞

  描述的是一個任務的某一種狀態。

① 阻塞:呼叫者當呼叫了被呼叫者時,被呼叫者沒有返回結果之前,呼叫者就一直等待,描述等待的這個狀態,為阻塞狀態。

② 非阻塞:呼叫者再沒有得到被呼叫者返回結果之前,會去執行其他的任務,描述不會等待這個狀態,為非阻塞。

概念的區分

同步非同步和阻塞與非阻塞

  阻塞與非阻塞和同步與非同步之間沒有必然的聯絡,是兩個概念 ,兩個角度   阻塞是使用了同步機制的結果   非阻塞是使用了非同步機制的結果。

① 非阻塞是不是一定就意味著非同步? 不是,非阻塞只能決定當前任務的狀態(可以不等著),是不是要去做其他的任務,不是由非阻塞決定的,是由非同步決定的。

② 阻塞是不是一定意味著任務之間一定不是非同步關係? 是

③ 非同步是不是意味著當前的任務處於非阻塞狀態? 是

④ 同步一定也意味著某一個時刻,某一個任務處於阻塞狀態? 是

3. 序列和並行

  是任務的執行方式

① 序列:多個任務時,各個任務按照順序執行,執行完一個任務之後,才能執行下一個任務。可以理解成同步的概念,兩個任務是序列執行的===兩個任務之間的關係是同步機制

② 並行:多個任務同時執行,意味著多個任務之間是非同步機制。

4. 並行和併發

  同時處理的含義,只有【並行】是真正意義上同時處理。

① 時間上:     並行指的是多個時間同一個時刻發生。     併發是多個事件在同一個時間間隔執行。其實是切換時間片輪流執行。微觀的角度(序列)

② 作用點上:     並行作用在多個實體上多個事件     併發作用在一個實體上的多個事件

③ 處理個數:      並行,多個處理器處理多個任務      併發,一個處理器處理多個任務

5. IO密集型和計算密集型

  程式(任務)的型別   IO密集型:cpu佔用率比較低,IO佔用率比較高。   Cpu密集型:cpu佔用率高,IO佔用率低。

  IO密集型更適合做併發處理。IO執行速度慢

6. 併發的三個層次

  低階:作業系統層面實現併發,一般是針對於一門語言的庫編寫,不是給程式設計師用,python不支援   中階:幾乎所有語言都支援中階併發。   高階:第三方模組執行併發操作。

7. 執行緒和程序

  程式:程式可以看成一些列的指令集。靜態的。   程序:當程式執行起來之後,建立一個(也可以是多個)程序。   執行緒:程序的基本執行單元,一個程序至少要一個執行緒。   程序可以看成是任務,比如灑水,掃地   執行緒就是基本的執行單元,執行任務的人。

  一個執行緒只能屬於一個程序

關於程序獨立,執行緒共享的問題(重要): 程序具有獨立的空間和系統資源,執行緒沒有獨立的系統資源,處於同一個程序下的執行緒共享該程序下的資源。 一定要避免多執行緒(同一個程序下)資源出現的併發修改問題————————執行緒不安全。

8. 多執行緒

  【同時】:併發

  多程序:多個任務同時執行   多執行緒:在同一個任務中,多個執行緒同時執行    處理:單核cpu處理IO密集型才有效果

多執行緒的缺點:   (1)執行緒也是程式,也需要佔用記憶體,設定的執行緒越多,佔用記憶體就越多。   (2)多執行緒需要協調管理,需要cpu時間跟蹤,cpu也會被佔用一部分。   (3)最重要:多執行緒的共享資源不安全。導致資料不一致。