進(jìn)程和線程

進(jìn)程

  • 它是處于執(zhí)行期的程序丢烘,或者說“進(jìn)程=程序+執(zhí)行”。但是進(jìn)程并不僅局限于一段可執(zhí)行代碼(代碼段)唉匾,它還包括進(jìn)程所需要的其他資源孕讳,例如打開的文件匠楚、掛起的信號(hào)量巍膘、內(nèi)存管理、處理器狀態(tài)芋簿、一個(gè)或者多個(gè)執(zhí)行線程和數(shù)據(jù)段等峡懈。Linux內(nèi)核通常把進(jìn)程叫做是任務(wù)(task),因此進(jìn)程控制塊(processing contrl block, PCB)也被命名為struct task_struct与斤》究担——《奔跑吧Linux內(nèi)核 3.1章》

線程

  • 線程機(jī)制是現(xiàn)代編程技術(shù)種常用的一種抽象概念荚恶。——《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》
  • 線程最主要的目的就是更好的支持SMP以及減辛字А(進(jìn)程/線程)上下文切換開銷谒撼。
  • 針對(duì)線程模型的兩大意義,分別開發(fā)出了核心級(jí)線程和用戶級(jí)線程兩種線程模型雾狈,分類的標(biāo)準(zhǔn)主要是線程的調(diào)度者在核內(nèi)還是在核外廓潜。前者更利于并發(fā)使用多處理器的資源,而后者則更多考慮的是上下文切換開銷善榛。在目前的商用系統(tǒng)中辩蛋,通常都將兩者結(jié)合起來使用,既提供核心線程以滿足smp系統(tǒng)的需要移盆,也支持用線程庫(kù)的方式在用戶態(tài)實(shí)現(xiàn)另一套線程機(jī)制悼院,此時(shí)一個(gè)核心線程同時(shí)成為多個(gè)用戶態(tài)線程的調(diào)度者。正如很多技術(shù)一樣咒循,"混合"通常都能帶來更高的效率据途,但同時(shí)也帶來更大的實(shí)現(xiàn)難度,出于"簡(jiǎn)單"的設(shè)計(jì)思路叙甸,Linux從一開始就沒有實(shí)現(xiàn)混合模型的計(jì)劃昨凡,但它在實(shí)現(xiàn)上采用了另一種思路的"混合"。
  • 從Linux內(nèi)核的角度看蚁署,線程和進(jìn)程是一樣的便脊,同樣的數(shù)據(jù)結(jié)構(gòu),同樣的調(diào)度算法光戈。線程只是一種和其它進(jìn)程共享某些資源的進(jìn)程哪痰。線程機(jī)制是現(xiàn)代編程技術(shù)種常用的一種抽象概念【米保——《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》
  • Windows和Solaris等系統(tǒng)晌杰,在內(nèi)核中提供了專門支持線程的機(jī)制。假如我們有一個(gè)包含4個(gè)線程的j進(jìn)程筷弦,在專門提供線程支持的系統(tǒng)中肋演,通常會(huì)一個(gè)包含四個(gè)不同線程的指針的進(jìn)程描述符。該描述符負(fù)責(zé)描述像地址空間烂琴、打開的文件這樣的共享資源爹殊,線程本身再去描述它獨(dú)占的資源。相反奸绷,Linux僅僅創(chuàng)建四個(gè)進(jìn)程并分配四個(gè)普通的tash_struct結(jié)構(gòu)梗夸。建立這四個(gè)進(jìn)程時(shí)指定他們的共享資源『抛恚——《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》
  • 線程被稱為輕量級(jí)進(jìn)程反症,它是操作系統(tǒng)調(diào)度的最小單元辛块,通常一個(gè)進(jìn)程可以擁有多個(gè)線程。線程和進(jìn)程的區(qū)別在于進(jìn)程擁有獨(dú)立的資源空間铅碍,而線程則共享進(jìn)程的資源空間润绵。Linux內(nèi)核沒有對(duì)線程有特別的調(diào)度算法或定義特別的數(shù)據(jù)結(jié)構(gòu)來標(biāo)識(shí)線程,線程和進(jìn)程都使用相同的進(jìn)程PCB數(shù)據(jù)結(jié)構(gòu)胞谈。內(nèi)核里使用clone方法來創(chuàng)建線程授药,進(jìn)程用fork方法來創(chuàng)建。clone的工作方式和創(chuàng)建進(jìn)程的fork方法類似呜魄,但會(huì)確定哪些資源和父進(jìn)程共享悔叽,哪些資源為線程獨(dú)享【粜幔——《奔跑吧Linux內(nèi)核 3.1章》
  • Linux線程的實(shí)現(xiàn)知名的有3個(gè)娇澎,分別是LinuxThreads,NPTL(Native Posix Thread Library)睹晒,NGPT(Next Generation Posix Threading)趟庄。最早是LinuxThreads,但在信號(hào)處理伪很、調(diào)度和進(jìn)程間同步原語(yǔ)方面都存在問題戚啥。后來POSIX標(biāo)準(zhǔn)提了一些要求,RedHat 公司牽頭研發(fā)了 NPTL(Native Posix Thread Library)锉试,IBM投資開發(fā)了 NGPT(Next Generation Posix Threading)猫十,二者都是圍繞完全兼容POSIX 1003.1c。大多數(shù)Linux系統(tǒng)選擇了NPTL呆盖,NGPT就被放棄了拖云。Linux2.6起,基本上使用了NPTL应又。
  • Linux的線程實(shí)現(xiàn)是在核外進(jìn)行的宙项,核內(nèi)提供的是創(chuàng)建進(jìn)程的接口do_fork()。內(nèi)核提供了兩個(gè)系統(tǒng)調(diào)用__clone()和fork()株扛,最終都用不同的參數(shù)調(diào)用do_fork()核內(nèi)API尤筐。當(dāng)然,要想實(shí)現(xiàn)線程洞就,沒有核心對(duì)多進(jìn)程(其實(shí)是輕量級(jí)進(jìn)程)共享數(shù)據(jù)段的支持是不行的盆繁,因此,do_fork()提供了很多參數(shù)奖磁,包括CLONE_VM(共享內(nèi)存空間)改基、CLONE_FS(共享文件系統(tǒng)信息)繁疤、CLONE_FILES(共享文件描述符表)咖为、CLONE_SIGHAND(共享信號(hào)句柄表)和CLONE_PID(共享進(jìn)程ID秕狰,僅對(duì)核內(nèi)進(jìn)程,即0號(hào)進(jìn)程有效)躁染。當(dāng)使用fork系統(tǒng)調(diào)用時(shí)鸣哀,內(nèi)核調(diào)用do_fork()不使用任何共享屬性,進(jìn)程擁有獨(dú)立的運(yùn)行環(huán)境吞彤,而使用pthread_create()來創(chuàng)建線程時(shí),則最終設(shè)置了所有這些屬性來調(diào)用__clone()我衬,而這些參數(shù)又全部傳給核內(nèi)的do_fork(),從而創(chuàng)建的"進(jìn)程"擁有共享的運(yùn)行環(huán)境饰恕,只有棧是獨(dú)立的挠羔,由__clone()傳入。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埋嵌,一起剝皮案震驚了整個(gè)濱河市破加,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雹嗦,老刑警劉巖范舀,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異了罪,居然都是意外死亡锭环,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門泊藕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辅辩,“玉大人,你說我怎么就攤上這事娃圆∑茫” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵踊餐,是天一觀的道長(zhǎng)景醇。 經(jīng)常有香客問我,道長(zhǎng)吝岭,這世上最難降的妖魔是什么三痰? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮窜管,結(jié)果婚禮上散劫,老公的妹妹穿的比我還像新娘。我一直安慰自己幕帆,他們只是感情好获搏,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著失乾,像睡著了一般常熙。 火紅的嫁衣襯著肌膚如雪纬乍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天裸卫,我揣著相機(jī)與錄音仿贬,去河邊找鬼。 笑死墓贿,一個(gè)胖子當(dāng)著我的面吹牛茧泪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聋袋,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼队伟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了幽勒?” 一聲冷哼從身側(cè)響起缰泡,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎代嗤,沒想到半個(gè)月后棘钞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡干毅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年宜猜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硝逢。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姨拥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渠鸽,到底是詐尸還是另有隱情叫乌,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布徽缚,位于F島的核電站憨奸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凿试。R本人自食惡果不足惜排宰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望那婉。 院中可真熱鬧板甘,春花似錦、人聲如沸详炬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至在跳,卻和暖如春枪萄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硬毕。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工呻引, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留礼仗,地道東北人吐咳。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像元践,于是被迫代替她去往敵國(guó)和親韭脊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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