多線程

1必怜。單進(jìn)程單線程:一個(gè)人在一個(gè)桌子上吃菜。

2蜻展。單進(jìn)程多線程:多個(gè)人在同一個(gè)桌子上一起吃菜虚吟。

3。多進(jìn)程單線程:多個(gè)人每個(gè)人在自己的桌子上吃菜怠肋。

多線程的問題是多個(gè)人同時(shí)吃一道菜的時(shí)候容易發(fā)生爭(zhēng)搶敬鬓,例如兩個(gè)人同時(shí)夾一個(gè)菜,一個(gè)人剛伸出筷子笙各,結(jié)果伸到的時(shí)候已經(jīng)被夾走菜了钉答。。杈抢。此時(shí)就必須等一個(gè)人夾一口之后数尿,在還給另外一個(gè)人夾菜,也就是說資源共享就會(huì)發(fā)生沖突爭(zhēng)搶惶楼。

1右蹦。對(duì)于 Windows 系統(tǒng)來說,【開桌子】的開銷很大歼捐,因此 Windows 鼓勵(lì)大家在一個(gè)桌子上吃菜何陆。因此 Windows 多線程學(xué)習(xí)重點(diǎn)是要大量面對(duì)資源爭(zhēng)搶與同步方面的問題。

2豹储。對(duì)于 Linux 系統(tǒng)來說贷盲,【開桌子】的開銷很小,因此 Linux 鼓勵(lì)大家盡量每個(gè)人都開自己的桌子吃菜剥扣。這帶來新的問題是:坐在兩張不同的桌子上巩剖,說話不方便。因此钠怯,Linux 下的學(xué)習(xí)重點(diǎn)大家要學(xué)習(xí)進(jìn)程間通訊的方法佳魔。

--

補(bǔ)充:有人對(duì)這個(gè)開桌子的開銷很有興趣。我把這個(gè)問題推廣說開一下呻疹。

開桌子的意思是指創(chuàng)建進(jìn)程吃引。開銷這里主要指的是時(shí)間開銷筹陵。

可以做個(gè)實(shí)驗(yàn):創(chuàng)建一個(gè)進(jìn)程,在進(jìn)程中往內(nèi)存寫若干數(shù)據(jù)镊尺,然后讀出該數(shù)據(jù)朦佩,然后退出。此過程重復(fù) 1000 次庐氮,相當(dāng)于創(chuàng)建/銷毀進(jìn)程 1000 次语稠。在我機(jī)器上的測(cè)試結(jié)果是:

UbuntuLinux:耗時(shí) 0.8 秒

Windows7:耗時(shí) 79.8 秒

兩者開銷大約相差一百倍。

這意味著弄砍,在 Windows 中仙畦,進(jìn)程創(chuàng)建的開銷不容忽視。換句話說就是音婶,Windows 編程中不建議你創(chuàng)建進(jìn)程慨畸,如果你的程序架構(gòu)需要大量創(chuàng)建進(jìn)程,那么最好是切換到 Linux 系統(tǒng)衣式。

大量創(chuàng)建進(jìn)程的典型例子有兩個(gè)寸士,一個(gè)是 gnu autotools 工具鏈,用于編譯很多開源代碼的碴卧,他們?cè)?Windows 下編譯速度會(huì)很慢弱卡,因此軟件開發(fā)人員最好是避免使用 Windows。另一個(gè)是服務(wù)器住册,某些服務(wù)器框架依靠大量創(chuàng)建進(jìn)程來干活婶博,甚至是對(duì)每個(gè)用戶請(qǐng)求就創(chuàng)建一個(gè)進(jìn)程,這些服務(wù)器在 Windows 下運(yùn)行的效率就會(huì)很差荧飞。這"可能"也是放眼全世界范圍凡人,Linux? 服務(wù)器遠(yuǎn)遠(yuǎn)多于 Windows 服務(wù)器的原因。

--

再次補(bǔ)充:如果你是寫服務(wù)器端應(yīng)用的垢箕,其實(shí)在現(xiàn)在的網(wǎng)絡(luò)服務(wù)模型下划栓,開桌子的開銷是可以忽略不計(jì)的兑巾,因?yàn)楝F(xiàn)在一般流行的是按照 CPU 核心數(shù)量開進(jìn)程或者線程条获,開完之后在數(shù)量上一直保持,進(jìn)程與線程內(nèi)部使用協(xié)程或者異步通信來處理多個(gè)并發(fā)連接蒋歌,因而開進(jìn)程與開線程的開銷可以忽略了帅掘。

另外一種新的開銷被提上日程:核心切換開銷。

現(xiàn)代的體系堂油,一般 CPU 會(huì)有多個(gè)核心修档,而多個(gè)核心可以同時(shí)運(yùn)行多個(gè)不同的線程或者進(jìn)程。

當(dāng)每個(gè) CPU 核心運(yùn)行一個(gè)進(jìn)程的時(shí)候府框,由于每個(gè)進(jìn)程的資源都獨(dú)立吱窝,所以 CPU 核心之間切換的時(shí)候無需考慮上下文。

當(dāng)每個(gè) CPU 核心運(yùn)行一個(gè)線程的時(shí)候,由于每個(gè)線程需要共享資源院峡,所以這些資源必須從 CPU 的一個(gè)核心被復(fù)制到另外一個(gè)核心兴使,才能繼續(xù)運(yùn)算,這占用了額外的開銷照激。換句話說发魄,在 CPU 為多核的情況下,多線程在性能上不如多進(jìn)程俩垃。

因而励幼,當(dāng)前面向多核的服務(wù)器端編程中,需要習(xí)慣多進(jìn)程而非多線程口柳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苹粟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跃闹,更是在濱河造成了極大的恐慌六水,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辣卒,死亡現(xiàn)場(chǎng)離奇詭異掷贾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荣茫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門想帅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啡莉,你說我怎么就攤上這事港准。” “怎么了咧欣?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵浅缸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我魄咕,道長(zhǎng)衩椒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任哮兰,我火速辦了婚禮毛萌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喝滞。我一直安慰自己阁将,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布右遭。 她就那樣靜靜地躺著做盅,像睡著了一般缤削。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吹榴,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天僻他,我揣著相機(jī)與錄音,去河邊找鬼腊尚。 笑死吨拗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的婿斥。 我是一名探鬼主播劝篷,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼民宿!你這毒婦竟也來了娇妓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤活鹰,失蹤者是張志新(化名)和其女友劉穎哈恰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體志群,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡着绷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锌云。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠医。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桑涎,靈堂內(nèi)的尸體忽然破棺而出彬向,到底是詐尸還是另有隱情,我是刑警寧澤攻冷,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布娃胆,位于F島的核電站,受9級(jí)特大地震影響等曼,放射性物質(zhì)發(fā)生泄漏里烦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一涉兽、第九天 我趴在偏房一處隱蔽的房頂上張望招驴。 院中可真熱鬧篙程,春花似錦枷畏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)触趴。三九已至,卻和暖如春渴肉,著一層夾襖步出監(jiān)牢的瞬間冗懦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工仇祭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留披蕉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓乌奇,卻偏偏與公主長(zhǎng)得像没讲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子礁苗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • 又來到了一個(gè)老生常談的問題爬凑,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問題開始试伙,來談?wù)劜?..
    tangsl閱讀 4,127評(píng)論 0 23
  • Object C中創(chuàng)建線程的方法是什么嘁信?如果在主線程中執(zhí)行代碼,方法是什么疏叨?如果想延時(shí)執(zhí)行代碼潘靖、方法又是什么? 1...
    AlanGe閱讀 1,740評(píng)論 0 17
  • 前言 在打算寫這篇多線層底層實(shí)現(xiàn)機(jī)制的時(shí)候蚤蔓,突然發(fā)現(xiàn)自己對(duì)于計(jì)算機(jī)竟然懂得這么表面秘豹,對(duì)于CPU的工作原理都不完全清...
    進(jìn)無盡閱讀 6,394評(píng)論 2 11
  • Linux線程概述 了解如何正確運(yùn)用線程是每一個(gè)優(yōu)秀程序員必備的素質(zhì)。 線程類似于進(jìn)程昌粤。如同進(jìn)程既绕,線程由內(nèi)核按時(shí)間...
    batbattle閱讀 2,245評(píng)論 0 5
  • 偶爾觸碰心靈袱讹,偶爾敞開心扉疲扎,我的故事,給風(fēng)捷雕,也給你椒丧。 ...
    Rickso閱讀 371評(píng)論 0 1