個人總結:線程,進程,異步,協程等概念及相互聯繫

操作系統,進程,線程之間的關係

現代操作系統都是支持“多任務”的操作系統:即操作系統可以同時運行多個任務。

要理解這些概念,需要先了解一下操作系統的一些相關概念。大部分操作系統(如Windows、Linux)的任務調度是採用時間片輪轉的搶佔式調度方式,也就是說一個任務執行一小段時間後強制暫停去執行下一個任務,每個任務輪流執行。任務執行的一小段時間叫做時間片,任務正在執行時的狀態叫運行狀態,任務執行一段時間後強制暫停去執行下一個任務,被暫停的任務就處於就緒狀態等待下一個屬於它的時間片的到來。這樣每個任務都能得到執行,由於CPU的執行效率非常高,時間片非常短,在各個任務之間快速地切換,給人的感覺就是多個任務在“同時進行”,這也就是我們所說的併發(別覺得併發有多高深,它的實現很複雜,但它的概念很簡單,就是一句話:多個任務同時執行)。

異步和多線程

多線程和異步的關係:從辯證的角度上看,異步是目的,多線程是其中的一個手段,多線程可以實現異步,異步是當一個調用者的請求發送給被調動者後不需要等待被調用者返回的結果,這個調用者可以是一個線程處理操作也可以是進程處理操作。

使用場景:當需要執行I/O操作時,使用異步操作比使用線程+同步 I/O操作更合適。線程的適用範圍則是那種需要長時間CPU運算的場合

協程

協程只是程序調度的方式,多線程和多進程由操作系統調度,而協程由程序自身即程序員調度,僅此而已。異步io指的是程序只發io指令並不阻塞等待io結果,在io結束前需要io結果的代碼當然不能執行,所以我們通過協程調度,然後讓cup去執行別的代碼,等io結束再切換回來,其實就只是增加cup的利用。io不是cpu在幹活,而是磁盤網絡之類,正是因為cpu的速度遠高於磁盤及網絡,所以我們通過異步的方式來io,就是io的時候不讓cpu傻站著等,io結束後,需要io結果的代碼需要接著執行,所以需要使用協程切換回來,協程只是可以讓程序在某個地方停下來,然後在需要的時候(io完成後)再接著執行。

寫在最後

這部分都是偏向應用層的,說的比較淺,而且很多地方也是個人看法,有不同的地方歡迎指正。


分享到:


相關文章: