詳解 進程、線程和協(xié)程的區(qū)別
首先,給出“進程、線程和協(xié)程”的特點:
- 進程:擁有自己獨立的堆和棧,既不共享堆,也不共享棧,進程由操作系統(tǒng)調度;
- 線程:擁有自己獨立的棧和共享的堆,共享堆,不共享棧,標準線程由操作系統(tǒng)調度;
- 協(xié)程:擁有自己獨立的棧和共享的堆,共享堆,不共享棧,協(xié)程由程序員在協(xié)程的代碼里顯示調度。
接下來,以一個形象的例子,進一步講述“進程、線程和協(xié)程”三者之間的區(qū)別:
假設有一個單核的操作系統(tǒng),系統(tǒng)上沒有其它的程序需要運行,現(xiàn)有兩個線程 A 和 B,A 和 B 在單獨運行時都需要 10 秒來完成自己的任務,而且任務都是運算操作,線程 A 和 B 之間沒有競爭和共享數(shù)據(jù)的問題?,F(xiàn)在讓 A 和 B 兩個線程并行,則操作系統(tǒng)會不停的在 A 和 B 兩個線程之間切換,達到一種偽并行的效果。
如果操作系統(tǒng)切換的頻率是每秒一次,切換的成本是 0.1 秒(主要是棧切換),則總共需要 20 + 19 * 0.1 = 21.9 秒;如果使用協(xié)程的方式,可以先運行協(xié)程 A,A 結束的時候讓位給協(xié)程 B,只發(fā)生一次切換,則總共需要 20 + 1 * 0.1 = 20.1 秒。如果操作系統(tǒng)是雙核的,而且線程是標準線程,那么線程 A 和 B 可以達到真的并行,則總時間為 10 秒;而協(xié)程的方式仍然需要 20.1 秒的時間。
感謝閱讀,希望能 幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:- python并發(fā)編程之多進程、多線程、異步和協(xié)程詳解
- python線程、進程和協(xié)程詳解
- 深入淺析python中的多進程、多線程、協(xié)程
- 簡述Python中的進程、線程、協(xié)程