三赡模、操作系統(tǒng)之線程

前言

什么是線程

多線程模型

線程庫

一贯城、什么是線程

1.1 引入線程的原因

引入線程主要出于三方面因素考慮:性能、應(yīng)用和硬件。

  • 從性能角度來看衣形,由于進程是重量級的,負載了程序運行中所有的內(nèi)容姿鸿,操作系統(tǒng)的開銷比較大谆吴,另外切換進程需保存現(xiàn)場和恢復(fù)現(xiàn)場,消耗也是比較大苛预。所以需要引入一種比進程開銷更小的線程單位句狼。
  • 從應(yīng)用角度來看,進程內(nèi)的代碼也有并行執(zhí)行的要求碟渺。如PPT在編輯(輸入鲜锚、拼寫、存盤等操作)的時候苫拍,也需要同時進行其他操作(如排版)芜繁。
  • 從硬件角度來看,多核處理器是目前主流的硬件架構(gòu)绒极,為了充分利用多核處理器的性能骏令,加速進程的運行,也是引入線程的重要原因垄提。

1.2 線程概念

什么是線程榔袋?

線程是可在 CPU 上運行的基本執(zhí)行單位。進程內(nèi)部的一個代碼片段可以被創(chuàng)建為一個線程铡俐。也就是說線程寄生在進程中凰兑。同進程一樣,線程也有多種狀態(tài)(就緒审丘、運行吏够、等待)和操作(創(chuàng)建、撤銷、等待锅知、喚醒)播急。但是有一點要注意,線程只是 CPU 上運行的基本執(zhí)行單位售睹,而進程是資源分配的基本單位桩警。線程自己不擁有系統(tǒng)資源,只能通過進程申請資源昌妹。

1.3 線程和進程關(guān)系

線程和進程的關(guān)系可以從代碼捶枢、資源、調(diào)度捺宗、切換和生命周期做比較柱蟀,如下圖:


線程和進程比較

1.4 線程結(jié)構(gòu)

線程由代碼和數(shù)據(jù)、各類資源蚜厉、線程控制塊(TCP)組成长已。其中代碼和數(shù)據(jù)以及各類資源都來源于進程。線程控制塊由線程ID昼牛、程序計算器PC术瓮、寄存器集、椃〗。空間組成胞四。



早期操作系統(tǒng)都是單線程,即一個進程只有一個線程伶椿。目前的操作系統(tǒng)都包含多個線程辜伟。如下圖為單線程和多線程。PS:register為寄存器的意思脊另。


單線程和多線程

1.5 線程優(yōu)點

  • 響應(yīng)度高:線程創(chuàng)建開銷小导狡。
  • 資源共享:進程中的線程可以共享進程資源。
  • 經(jīng)濟性:線程創(chuàng)建偎痛、上下文切換比進程快旱捧。如Solaris 系統(tǒng)中,創(chuàng)建線程比進程快 30 倍踩麦,線程切換比進程切換快 5 倍枚赡。
  • 可以充分利用多核處理器結(jié)構(gòu),并行運行縮短時間谓谦。

二贫橙、多線程模型

線程由兩種狀態(tài)用戶態(tài)和核心態(tài),分別對應(yīng)用戶線程和內(nèi)核線程反粥。按照用戶線程和內(nèi)核線程劃分料皇,可以分為三種線程模型: 一對一模型谓松、多對一模型和多對多模型。

2.1 用戶線程和內(nèi)核線程

用戶線程是由用戶線程庫進行管理的線程践剂。系統(tǒng)內(nèi)核看不到用戶線程,用戶線程的創(chuàng)建和調(diào)度始終存在于用戶空間娜膘,內(nèi)核無法干預(yù)逊脯。用戶線程應(yīng)用于傳統(tǒng)的只支持進程的操作系統(tǒng)。常用的用于創(chuàng)建用戶線程的線程庫有:Java threads竣贪、Win32 threads军洼。


內(nèi)核線程是由內(nèi)核進行管理的線程。需要內(nèi)核的支持演怎,由內(nèi)核完成線程調(diào)度匕争、創(chuàng)建和撤銷。Windows XP/2000爷耀、Linux甘桑、Tru64 UNIX、Mac OS X等操作系統(tǒng)都支持內(nèi)核線程歹叮。


2.2 多對一模型

主要應(yīng)用在不支持內(nèi)核線程只支持進程的操作系統(tǒng)中跑杭。該操作系統(tǒng)內(nèi)核只能看到一個進程。為了在進程中創(chuàng)建線程就需要借助第三方線程庫實現(xiàn)咆耿。此種情況下德谅,進程中的用戶線程由進程自己管理,無需內(nèi)核干涉萨螺。缺點是一個線程的切換窄做,會導(dǎo)致進程的阻塞。


2.3 一對一模型

該模型用于支持線程的操作系統(tǒng)慰技,可以由操作系統(tǒng)統(tǒng)一管理線程椭盏。優(yōu)點是并發(fā)性好,多個線程可并行運行在多個處理器上惹盼;缺點是內(nèi)核開銷較大庸汗。


2.4 多對多模型

該模型中,多個用戶線程映射為相等或更小數(shù)目的內(nèi)核線程手报。如下圖四個用戶線程映射為三個內(nèi)核線程蚯舱。該模型的有點是兼顧了并發(fā)性和效率;缺點應(yīng)為映射的處理掩蛤,復(fù)雜度增加枉昏,需要額外的線程管理模塊實現(xiàn)映射。


上述說了三個用戶線程模型揍鸟,現(xiàn)在的操作系統(tǒng)中也有存在混合使用三種模型的情況兄裂。

三句旱、線程庫

為程序員提供API來創(chuàng)建和管理線程。線程庫有兩種模式:用戶庫和內(nèi)核庫晰奖。

用戶庫用于創(chuàng)建和管理用戶線程谈撒,僅存在與用戶空間,沒有內(nèi)核支持匾南,不會產(chǎn)生系統(tǒng)調(diào)用啃匿;內(nèi)核庫用于創(chuàng)建內(nèi)核線程,存在于內(nèi)核蛆楞,需要操作系統(tǒng)支持溯乒,會產(chǎn)生系統(tǒng)調(diào)用。

常用的線程庫有Pthreads線程庫豹爹、Java線程庫裆悄、Win32線程庫。Pthreads線程庫常用與創(chuàng)建用戶線程臂聋;Java線程庫常用與創(chuàng)建用戶線程光稼;而Win32線程庫常用于創(chuàng)建內(nèi)核線程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逻住,一起剝皮案震驚了整個濱河市钟哥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞎访,老刑警劉巖腻贰,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扒秸,居然都是意外死亡播演,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門伴奥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來写烤,“玉大人,你說我怎么就攤上這事拾徙≈薮叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵尼啡,是天一觀的道長暂衡。 經(jīng)常有香客問我,道長崖瞭,這世上最難降的妖魔是什么狂巢? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮书聚,結(jié)果婚禮上唧领,老公的妹妹穿的比我還像新娘藻雌。我一直安慰自己,他們只是感情好斩个,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布胯杭。 她就那樣靜靜地躺著,像睡著了一般萨驶。 火紅的嫁衣襯著肌膚如雪歉摧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天腔呜,我揣著相機與錄音,去河邊找鬼再悼。 笑死核畴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冲九。 我是一名探鬼主播谤草,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莺奸!你這毒婦竟也來了丑孩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灭贷,失蹤者是張志新(化名)和其女友劉穎温学,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甚疟,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡仗岖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了览妖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轧拄。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖讽膏,靈堂內(nèi)的尸體忽然破棺而出檩电,到底是詐尸還是另有隱情,我是刑警寧澤府树,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布俐末,位于F島的核電站,受9級特大地震影響挺尾,放射性物質(zhì)發(fā)生泄漏鹅搪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一遭铺、第九天 我趴在偏房一處隱蔽的房頂上張望丽柿。 院中可真熱鬧恢准,春花似錦、人聲如沸甫题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坠非。三九已至敏沉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炎码,已是汗流浹背盟迟。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潦闲,地道東北人攒菠。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像歉闰,于是被迫代替她去往敵國和親辖众。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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