線程、進程、攜程理解
阿新 • • 發佈:2019-03-04
創建 其他 異步操作 -m 改進 茶葉 操作 內存空間 分配
並發與並行
並發
擁有處理多個任務的能力。對於單核CPU來說,只能處理並發
並行
擁有同時處理多個任務的能力,對於多核CPU,即可以並發和並行
同步與異步
同步和異步強調的是消息通信機制
同步
如果一個人這樣處理:先燒水,燒水的過程中啥也不幹,就一直等著,等水開後,再把茶葉放到開水壺中。這種處理方法就是同步處理
也就是說,一個任務需要多步執行,如果上一步沒有執行結束,那麽下一步任務就一直等待。等到上一步任務完成後(一般會有結果),下一步的任務才繼續執行
在計算機中:如果一段代碼A的執行中需要調用另一端代碼B,那麽代碼A就會一直等待,直到代碼B執行結束後才繼續向下執行
異步
如果這樣做:用一個會報警的水壺。吧涼水放到水壺裏,點著火就去幹其他事情了。等水壺的報警器報警的時候,他再過去吧茶葉放到開水壺裏。這就是異步操作。
此人改進過程:用了一個會報警的水壺,他把涼水放到水壺裏,點著火後就去幹其他事了。同事交代他的仆人等水開了就把茶葉放到開水壺裏,等水壺的報警器報警的時候,他的仆人就去吧茶葉放到開水壺裏。
仆人就相當於計算機異步操作中的回調函數。水壺報警相當於調用回調函數
阻塞和非阻塞
阻塞和非阻塞強調的是程序在等待調用結果(消息,返回值)時的狀態
阻塞
程序在等待的過程中,線程是掛起狀態。就像剛才的例子中,這個燒水的人,在等待水開的過程中在睡覺。而同步等待的過程中,線程是激活狀態
非阻塞
線程、進程、攜程
進程是操作系統最小的資源分配單位。線程是操作系統最小的執行單元。
進程(我用的是 multiprocessing 模塊)
進程是運行著的程序以及其占用的系統資源的總和。每個進程都有獨立的內存空間。
創建一個進程(Process)
子進程阻塞進程(進程對象的join方法)
守護進程
隊列(Queue、JoinableQueue)【生產/消防 模型】、鎖、信號量、進程池、事件、管道
線程
協程
線程、進程、攜程理解