1. 程式人生 > >線程、進程、攜程理解

線程、進程、攜程理解

創建 其他 異步操作 -m 改進 茶葉 操作 內存空間 分配

並發與並行

並發

擁有處理多個任務的能力。對於單核CPU來說,只能處理並發

並行

擁有同時處理多個任務的能力,對於多核CPU,即可以並發和並行

同步與異步

同步和異步強調的是消息通信機制

同步

如果一個人這樣處理:先燒水,燒水的過程中啥也不幹,就一直等著,等水開後,再把茶葉放到開水壺中。這種處理方法就是同步處理
也就是說,一個任務需要多步執行,如果上一步沒有執行結束,那麽下一步任務就一直等待。等到上一步任務完成後(一般會有結果),下一步的任務才繼續執行
在計算機中:如果一段代碼A的執行中需要調用另一端代碼B,那麽代碼A就會一直等待,直到代碼B執行結束後才繼續向下執行

異步

如果這樣做:用一個會報警的水壺。吧涼水放到水壺裏,點著火就去幹其他事情了。等水壺的報警器報警的時候,他再過去吧茶葉放到開水壺裏。這就是異步操作。
此人改進過程:用了一個會報警的水壺,他把涼水放到水壺裏,點著火後就去幹其他事了。同事交代他的仆人等水開了就把茶葉放到開水壺裏,等水壺的報警器報警的時候,他的仆人就去吧茶葉放到開水壺裏。
仆人就相當於計算機異步操作中的回調函數。水壺報警相當於調用回調函數

阻塞和非阻塞

阻塞和非阻塞強調的是程序在等待調用結果(消息,返回值)時的狀態

阻塞

程序在等待的過程中,線程是掛起狀態。就像剛才的例子中,這個燒水的人,在等待水開的過程中在睡覺。而同步等待的過程中,線程是激活狀態

非阻塞

線程、進程、攜程

進程是操作系統最小的資源分配單位。線程是操作系統最小的執行單元。

進程(我用的是 multiprocessing 模塊)

進程是運行著的程序以及其占用的系統資源的總和。每個進程都有獨立的內存空間。

創建一個進程(Process)

子進程阻塞進程(進程對象的join方法)

守護進程

隊列(Queue、JoinableQueue)【生產/消防 模型】、鎖、信號量、進程池、事件、管道

線程

協程

線程、進程、攜程理解