詳細(xì)介紹 進(jìn)程、線程和協(xié)程的區(qū)別
詳解 進(jìn)程、線程和協(xié)程的區(qū)別
首先,給出“進(jìn)程、線程和協(xié)程”的特點(diǎn):
- 進(jìn)程:擁有自己獨(dú)立的堆和棧,既不共享堆,也不共享?xiàng)?,進(jìn)程由操作系統(tǒng)調(diào)度;
- 線程:擁有自己獨(dú)立的棧和共享的堆,共享堆,不共享?xiàng)?,?biāo)準(zhǔn)線程由操作系統(tǒng)調(diào)度;
- 協(xié)程:擁有自己獨(dú)立的棧和共享的堆,共享堆,不共享?xiàng)?,協(xié)程由程序員在協(xié)程的代碼里顯示調(diào)度。
接下來(lái),以一個(gè)形象的例子,進(jìn)一步講述“進(jìn)程、線程和協(xié)程”三者之間的區(qū)別:
假設(shè)有一個(gè)單核的操作系統(tǒng),系統(tǒng)上沒(méi)有其它的程序需要運(yùn)行,現(xiàn)有兩個(gè)線程 A 和 B,A 和 B 在單獨(dú)運(yùn)行時(shí)都需要 10 秒來(lái)完成自己的任務(wù),而且任務(wù)都是運(yùn)算操作,線程 A 和 B 之間沒(méi)有競(jìng)爭(zhēng)和共享數(shù)據(jù)的問(wèn)題?,F(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ì)本站的支持!
相關(guān)文章
一文讀懂吞吐量(TPS)、QPS、并發(fā)數(shù)、響應(yīng)時(shí)間(RT)概念
這篇文章主要介紹了吞吐量(TPS)、QPS、并發(fā)數(shù)、響應(yīng)時(shí)間(RT)概念,在開(kāi)發(fā)中需要先搞懂這些基礎(chǔ)知識(shí),才能更好運(yùn)用,需要的朋友可以參考下2020-07-07使用roolup構(gòu)建你的lib(實(shí)現(xiàn)步驟)
大家都知道Rollup更加適合用于構(gòu)建lib 而 Webpack, Precel 更加適合開(kāi)發(fā)應(yīng)用。本文,將結(jié)合一個(gè)簡(jiǎn)單的例子說(shuō)說(shuō)如何使用Rollup構(gòu)建自己的lib,感興趣的朋友一起看看吧2021-08-08Typora?0.11.18免費(fèi)版本安裝使用教程(親測(cè)可用)
Typora是一款非常使用的筆記工具,對(duì)于程序員非常友好,在2021年11月23日,Typora?正式發(fā)布?1.0?版本,進(jìn)入了付費(fèi)時(shí)代,Typora免費(fèi)版本0.11.18(最后的免費(fèi)版),本文給大家分享Typora免費(fèi)獲取方法及安裝使用教程,感興趣的朋友參考下吧2022-07-07計(jì)算機(jī)程序設(shè)計(jì)并行計(jì)算概念及定義全面詳解
最近項(xiàng)目需要實(shí)現(xiàn)程序的并行化,剛好借著翻譯這篇帖子的機(jī)會(huì),了解和熟悉并行計(jì)算的基本概念和程序設(shè)計(jì),有需要的朋友可以借鑒參考下2021-11-11支付寶小程序向用戶發(fā)紅包的實(shí)現(xiàn)方法
這篇文章主要介紹了支付寶小程序向用戶發(fā)紅包的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11