(轉(zhuǎn))車間里面的進(jìn)程和線程

程序并不能單獨(dú)執(zhí)行玻蝌,只有將程序加載到內(nèi)存中扒寄,系統(tǒng)為他分配資源后才能夠執(zhí)行或杠,這種執(zhí)行的程序稱之為進(jìn)程哪怔,也就是說進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,每個(gè)進(jìn)程都有自己?jiǎn)为?dú)的地址空間向抢。所以說程序與進(jìn)程的區(qū)別在于认境,程序是指令的集合,是進(jìn)程運(yùn)行的靜態(tài)描述文本挟鸠,而進(jìn)程則是程序在系統(tǒng)上順序執(zhí)行時(shí)的動(dòng)態(tài)活動(dòng)叉信。

但是進(jìn)程存在著很多缺陷,主要集中在兩點(diǎn):?

(1).進(jìn)程只能在同一時(shí)間干一件事情艘希,如果想同時(shí)干兩件事或多件事情硼身,進(jìn)程就無能為力了。?

(2).進(jìn)程在執(zhí)行的過程中如果由于某種原因阻塞了覆享,例如等待輸入佳遂,整個(gè)進(jìn)程就會(huì)掛起,其他與輸入無關(guān)的工作也必須等待輸入結(jié)束后才能順序執(zhí)行撒顿。

為了解決上述兩點(diǎn)缺陷丑罪,引入了線程這個(gè)概念。

線程是進(jìn)程的一個(gè)實(shí)體,也是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位,有時(shí)又被稱為輕權(quán)進(jìn)程或輕量級(jí)進(jìn)程吩屹,相對(duì)進(jìn)程而言跪另,線程是一個(gè)更加接近于執(zhí)行體的概念,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元煤搜,而線程自己基本上不擁有系統(tǒng)資源免绿,也沒有自己的地址空間,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),線程的改變只代表了 CPU 執(zhí)行過程的改變擦盾,而沒有發(fā)生進(jìn)程所擁有的資源變化嘲驾。除了CPU 之外,計(jì)算機(jī)內(nèi)的軟硬件資源的分配與線程無關(guān)厌衙,但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源距淫。

進(jìn)程和線程的主要差別在于操作系統(tǒng)并沒有將多個(gè)線程看作多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配婶希。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后蓬衡,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響喻杈,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量狰晚,但線程之間沒有單獨(dú)的地址空間筒饰,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯壁晒,但在進(jìn)程切換時(shí)瓷们,耗費(fèi)資源較大,效率要差一些秒咐,對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作谬晕,只能用線程,不能用進(jìn)程携取,每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口攒钳、順序執(zhí)行序列和程序的出口,但是線程不能夠獨(dú)立執(zhí)行雷滋,必須依存在應(yīng)用程序中不撑,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

最后附一篇材料晤斩,以圖的方式將進(jìn)程和線程做了很好的類比:

計(jì)算機(jī)的核心是CPU焕檬,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠澳泵,時(shí)刻在運(yùn)行实愚。

假定工廠的電力有限,一次只能供給一個(gè)車間使用。也就是說爆侣,一個(gè)車間開工的時(shí)候萍程,其他車間都必須停工。背后的含義就是兔仰,單個(gè)CPU一次只能運(yùn)行一個(gè)任務(wù)

進(jìn)程就好比工廠的車間茫负,它代表CPU所能處理的單個(gè)任務(wù)。任一時(shí)刻乎赴,CPU總是運(yùn)行一個(gè)進(jìn)程忍法,其他進(jìn)程處于非運(yùn)行狀態(tài)。

一個(gè)車間里榕吼,可以有很多工人饿序。他們協(xié)同完成一個(gè)任務(wù)。

線程就好比車間里的工人羹蚣。一個(gè)進(jìn)程可以包括多個(gè)線程原探。

車間的空間是工人們共享的,比如許多房間是每個(gè)工人都可以進(jìn)出的顽素。這象征一個(gè)進(jìn)程的內(nèi)存空間是共享的咽弦,每個(gè)線程都可以使用這些共享內(nèi)存。

可是胁出,每間房間的大小不同型型,有些房間最多只能容納一個(gè)人,比如廁所全蝶。里面有人的時(shí)候闹蒜,其他人就不能進(jìn)去了。這代表一個(gè)線程使用某些共享內(nèi)存時(shí)抑淫,其他線程必須等它結(jié)束绷落,才能使用這一塊內(nèi)存。

一個(gè)防止他人進(jìn)入的簡(jiǎn)單方法丈冬,就是門口加一把鎖嘱函。先到的人鎖上門,后到的人看到上鎖埂蕊,就在門口排隊(duì)往弓,等鎖打開再進(jìn)去。這就叫”互斥鎖”(Mutual exclusion蓄氧,縮寫 Mutex)函似,防止多個(gè)線程同時(shí)讀寫某一塊內(nèi)存區(qū)域。

還有些房間喉童,可以同時(shí)容納n個(gè)人撇寞,比如廚房。也就是說,如果人數(shù)大于n蔑担,多出來的人只能在外面等著牌废。這好比某些內(nèi)存區(qū)域,只能供給固定數(shù)目的線程使用啤握。

這時(shí)的解決方法鸟缕,就是在門口掛n把鑰匙。進(jìn)去的人就取一把鑰匙排抬,出來時(shí)再把鑰匙掛回原處懂从。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門口排隊(duì)等著了蹲蒲。這種做法叫做”信號(hào)量”(Semaphore)番甩,用來保證多個(gè)線程不會(huì)互相沖突。?

不難看出届搁,mutex是semaphore的一種特殊情況(n=1時(shí))缘薛。也就是說,完全可以用后者替代前者卡睦。但是掩宜,因?yàn)閙utex較為簡(jiǎn)單,且效率高么翰,所以在必須保證資源獨(dú)占的情況下,還是采用這種設(shè)計(jì)辽旋。

操作系統(tǒng)的設(shè)計(jì)浩嫌,因此可以歸結(jié)為三點(diǎn):?

(1)以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行补胚;?

(2)以多線程形式码耐,允許單個(gè)任務(wù)分成不同的部分運(yùn)行;?

(3)提供協(xié)調(diào)機(jī)制溶其,一方面防止進(jìn)程之間和線程之間產(chǎn)生沖突骚腥,另一方面允許進(jìn)程之間和線程之間共享資源。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓶逃,一起剝皮案震驚了整個(gè)濱河市束铭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厢绝,老刑警劉巖契沫,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異昔汉,居然都是意外死亡懈万,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來会通,“玉大人口予,你說我怎么就攤上這事√槌蓿” “怎么了沪停?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)驾凶。 經(jīng)常有香客問我牙甫,道長(zhǎng),這世上最難降的妖魔是什么调违? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任窟哺,我火速辦了婚禮,結(jié)果婚禮上技肩,老公的妹妹穿的比我還像新娘且轨。我一直安慰自己,他們只是感情好虚婿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布旋奢。 她就那樣靜靜地躺著,像睡著了一般然痊。 火紅的嫁衣襯著肌膚如雪至朗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天剧浸,我揣著相機(jī)與錄音锹引,去河邊找鬼。 笑死唆香,一個(gè)胖子當(dāng)著我的面吹牛嫌变,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躬它,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼腾啥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了冯吓?” 一聲冷哼從身側(cè)響起倘待,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桑谍,沒想到半個(gè)月后延柠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惹苗,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忘闻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了处窥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡增热,死狀恐怖整以,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峻仇,我是刑警寧澤公黑,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站摄咆,受9級(jí)特大地震影響凡蚜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吭从,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一朝蜘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涩金,春花似錦谱醇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至全度,卻和暖如春煮剧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背将鸵。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工轿秧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咨堤。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像漩符,于是被迫代替她去往敵國(guó)和親一喘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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