進(jìn)程、線程秘遏、協(xié)程簡(jiǎn)單梳理

進(jìn)程丘薛、線程與協(xié)程總結(jié)


1、進(jìn)程(process)

定義

  • 廣義定義邦危,進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)洋侨。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中铡俐,進(jìn)程既是基本的分配單元凰兑,也是基本的執(zhí)行單元。
  • 狹義定義审丘,進(jìn)程是正在運(yùn)行的程序的實(shí)例吏够。

進(jìn)程的兩個(gè)主要概念:第一,進(jìn)程是一個(gè)實(shí)體滩报。每個(gè)進(jìn)程都有它自己的地址空間锅知,一般情況下,包括文本區(qū)域(text region)脓钾、數(shù)據(jù)區(qū)域(data region)和堆棧(stack region)售睹。文本區(qū)域存儲(chǔ)處理器執(zhí)行的代碼;數(shù)據(jù)區(qū)域存儲(chǔ)變量和進(jìn)程執(zhí)行期間使用的動(dòng)態(tài)分配的內(nèi)存可训;堆棧區(qū)域存儲(chǔ)著活動(dòng)過程調(diào)用的指令和本地變量昌妹。第二,進(jìn)程是一個(gè)‘執(zhí)行中的程序’握截。程序是一個(gè)沒有生命的實(shí)體飞崖,只有處理器賦予程序生命時(shí)(操作系統(tǒng)執(zhí)行之),它才能成為一個(gè)活動(dòng)的實(shí)體谨胞,我們稱其為進(jìn)程固歪。

進(jìn)程是操作系統(tǒng)中最基本、重要的概念胯努。是多道程序系統(tǒng)出現(xiàn)后牢裳,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動(dòng)態(tài)情況逢防,描述系統(tǒng)內(nèi)部各道程序的活動(dòng)規(guī)律引進(jìn)的一個(gè)概念,所有多道程序設(shè)計(jì)操作系統(tǒng)都建立在進(jìn)程的基礎(chǔ)上蒲讯。

操作系統(tǒng)引入進(jìn)程的概念的原因:

  • 從理論角度看忘朝,是對(duì)正在運(yùn)行的程序過程的抽象;
  • 從實(shí)現(xiàn)角度看伶椿,是一種數(shù)據(jù)結(jié)構(gòu)辜伟,母的在于清晰地刻畫動(dòng)態(tài)系統(tǒng)的內(nèi)在規(guī)律氓侧,有效管理和調(diào)度進(jìn)入計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器運(yùn)行的程序脊另。

2、線程(thread)

?有時(shí)被稱為輕量進(jìn)程(Lightweight Process约巷,LWP)偎痛,是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID独郎,當(dāng)前指令指針(PC)踩麦,寄存器集合和堆棧組成。另外氓癌,線程是進(jìn)程中的一個(gè)實(shí)體谓谦,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源贪婉,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源反粥,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程疲迂,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行才顿。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性尤蒿。線程也有就緒郑气、阻塞和運(yùn)行三種基本狀態(tài)。就緒狀態(tài)是指線程具備運(yùn)行的所有條件腰池,邏輯上可以運(yùn)行尾组,在等待處理機(jī);運(yùn)行狀態(tài)是指線程占有處理機(jī)正在運(yùn)行示弓;阻塞狀態(tài)是指線程在等待一個(gè)事件(如某個(gè)信號(hào)量)讳侨,邏輯上不可執(zhí)行。每一個(gè)程序都至少有一個(gè)線程避乏,若程序只有一個(gè)線程爷耀,那就是程序本身。
線程是程序中一個(gè)單一的順序控制流程拍皮。進(jìn)程內(nèi)有一個(gè)相對(duì)獨(dú)立的歹叮、可調(diào)度的執(zhí)行單元跑杭,是系統(tǒng)獨(dú)立調(diào)度和分派CPU的基本單位指令運(yùn)行時(shí)的程序的調(diào)度單位。在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作咆耿,稱為多線程德谅。


補(bǔ)充

線程與進(jìn)程的不同

差異:同一個(gè)進(jìn)程的線程之間共享該進(jìn)程的公共內(nèi)存。所以它們可以訪問同一個(gè)文件萨螺。不同進(jìn)程之間共享整個(gè)內(nèi)存空間窄做,但是每個(gè)進(jìn)程只能訪問特定的地址空間。

  • 一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程
  • 線程的劃分尺度小于進(jìn)程慰技,使得多線程程序的并發(fā)性高
  • 進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元椭盏,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率
  • 線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的吻商。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口掏颊、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行艾帐,必須依存在應(yīng)用程序中乌叶,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制
  • 從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中柒爸,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行准浴。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配捎稚。這就是進(jìn)程和線程的重要區(qū)別
優(yōu)缺點(diǎn):

?線程執(zhí)行開銷小乐横,但不利于資源的管理和保護(hù);而進(jìn)程正相反阳藻。同時(shí)晰奖,線程適合于在SMP(多核處理機(jī))機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移腥泥。


引用:關(guān)于線程與進(jìn)程匾南,知乎上看到一個(gè)很好的回答。
作者:zhonyong
鏈接:https://www.zhihu.com/question/25532384/answer/81152571

?首先來一句概括的總論:進(jìn)程和線程都是一個(gè)時(shí)間段的描述蛔外,是CPU工作時(shí)間段的描述蛆楞。下面細(xì)說背景:CPU+RAM+各種資源(比如顯卡,光驅(qū)夹厌,鍵盤豹爹,GPS, 等等外設(shè))構(gòu)成我們的電腦,但是電腦的運(yùn)行矛纹,實(shí)際就是CPU和相關(guān)寄存器以及RAM之間的事情臂聋。一個(gè)最最基礎(chǔ)的事實(shí):CPU太快,太快,太快了孩等,寄存器僅僅能夠追的上他的腳步艾君,RAM和別的掛在各總線上的設(shè)備完全是望其項(xiàng)背。那當(dāng)多個(gè)任務(wù)要執(zhí)行的時(shí)候怎么辦呢肄方?輪流著來?或者誰優(yōu)先級(jí)高誰來冰垄?不管怎么樣的策略,一句話就是在CPU看來就是輪流著來权她。一個(gè)必須知道的事實(shí):執(zhí)行一段程序代碼虹茶,實(shí)現(xiàn)一個(gè)功能的過程介紹 ,當(dāng)?shù)玫紺PU的時(shí)候隅要,相關(guān)的資源必須也已經(jīng)就位蝴罪,就是顯卡啊,GPS啊什么的必須就位拾徙,然后CPU開始執(zhí)行洲炊。這里除了CPU以外所有的就構(gòu)成了這個(gè)程序的執(zhí)行環(huán)境感局,也就是我們所定義的程序上下文尼啡。當(dāng)這個(gè)程序執(zhí)行完了,或者分配給他的CPU執(zhí)行時(shí)間用完了询微,那它就要被切換出去崖瞭,等待下一次CPU的臨幸。在被切換出去的最后一步工作就是保存程序上下文撑毛,因?yàn)檫@個(gè)是下次他被CPU臨幸的運(yùn)行環(huán)境书聚,必須保存。串聯(lián)起來的事實(shí):前面講過在CPU看來所有的任務(wù)都是一個(gè)一個(gè)的輪流執(zhí)行的藻雌,具體的輪流方法就是:先加載程序A的上下文雌续,然后開始執(zhí)行A,保存程序A的上下文胯杭,調(diào)入下一個(gè)要執(zhí)行的程序B的程序上下文驯杜,然后開始執(zhí)行B,保存程序B的上下文。做个。鸽心。。

========= 重要的東西出現(xiàn)了========

?進(jìn)程和線程就是這樣的背景出來的居暖,兩個(gè)名詞不過是對(duì)應(yīng)的CPU時(shí)間段的描述顽频,名詞就是這樣的功能。進(jìn)程就是包換上下文切換的程序執(zhí)行時(shí)間總和 = CPU加載上下文+CPU執(zhí)行+CPU保存上下文線程是什么呢太闺?進(jìn)程的顆粒度太大糯景,每次都要有上下的調(diào)入,保存,調(diào)出蟀淮。如果我們把進(jìn)程比喻為一個(gè)運(yùn)行在電腦上的軟件丑孩,那么一個(gè)軟件的執(zhí)行不可能是一條邏輯執(zhí)行的,必定有多個(gè)分支和多個(gè)程序段灭贷,就好比要實(shí)現(xiàn)程序A温学,實(shí)際分成 a,b甚疟,c等多個(gè)塊組合而成仗岖。那么這里具體的執(zhí)行就可能變成:程序A得到CPU =》CPU加載上下文,開始執(zhí)行程序A的a小段览妖,然后執(zhí)行A的b小段轧拄,然后再執(zhí)行A的c小段,最后CPU保存A的上下文讽膏。這里a檩电,b,c的執(zhí)行是共享了A的上下文府树,CPU在執(zhí)行的時(shí)候沒有進(jìn)行上下文切換的俐末。這里的a,b奄侠,c就是線程卓箫,也就是說線程是共享了進(jìn)程的上下文環(huán)境,的更為細(xì)小的CPU時(shí)間段垄潮。到此全文結(jié)束烹卒,再一個(gè)總結(jié):進(jìn)程和線程都是一個(gè)時(shí)間段的描述,是CPU工作時(shí)間段的描述弯洗,不過是顆粒大小不同旅急。


3、協(xié)程(coroutine)

定義:協(xié)程是一個(gè)無優(yōu)先級(jí)的子程序調(diào)度組件牡整,允許子程序在特定的地方掛起/恢復(fù)藐吮。線程包含于進(jìn)程,協(xié)程包含于線程果正。只要內(nèi)存足夠炎码,一個(gè)線程中可以有任意多個(gè)協(xié)程,但某一時(shí)刻只能有一個(gè)協(xié)程在運(yùn)行秋泳,多個(gè)協(xié)程分享該線程分配到的計(jì)算機(jī)資源潦闲。
作用:就實(shí)際使用理解來講,協(xié)程允許我們寫同步代碼的邏輯迫皱,卻做著異步的事歉闰,避免了回調(diào)嵌套辖众,使得代碼邏輯清晰

補(bǔ)充: 子例程又被稱為子程序、過程和敬、方法凹炸、函數(shù)等。在主程序中可以調(diào)用子例程來執(zhí)行昼弟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啤它,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舱痘,更是在濱河造成了極大的恐慌变骡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芭逝,死亡現(xiàn)場(chǎng)離奇詭異塌碌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)旬盯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門台妆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胖翰,你說我怎么就攤上這事接剩。” “怎么了泡态?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵搂漠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我某弦,道長(zhǎng),這世上最難降的妖魔是什么而克? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任靶壮,我火速辦了婚禮,結(jié)果婚禮上员萍,老公的妹妹穿的比我還像新娘腾降。我一直安慰自己,他們只是感情好碎绎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布螃壤。 她就那樣靜靜地躺著,像睡著了一般筋帖。 火紅的嫁衣襯著肌膚如雪奸晴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天日麸,我揣著相機(jī)與錄音寄啼,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛墩划,可吹牛的內(nèi)容都是我干的涕刚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乙帮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杜漠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起察净,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤碑幅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后塞绿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沟涨,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年异吻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了裹赴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诀浪,死狀恐怖棋返,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雷猪,我是刑警寧澤睛竣,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站求摇,受9級(jí)特大地震影響射沟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜与境,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一验夯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摔刁,春花似錦挥转、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拗引,卻和暖如春借宵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寺擂。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工暇务, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泼掠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓垦细,卻偏偏與公主長(zhǎng)得像择镇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子括改,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容