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