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