7 線程概念與多線程模型

線程的基本概念

引入進程的目的,是為了使多道程序并發(fā)執(zhí)行,以提高資源利用率和系統(tǒng)吞吐量;而引入線程,則是為了減小程序在并發(fā)執(zhí)行時所付出的時空開銷,提高操作系統(tǒng)的并發(fā)性能。

線程最直接的理解就是“輕量級進程”,它是一個基本的CPU執(zhí)行單元,也是程序執(zhí)行流的最小單元,由線程ID、程序計數(shù)器、寄存器集合和堆棧組成。線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其他線程共享進程所擁有的全部資源。

一個線程可以創(chuàng)建和撤銷另一個線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運行三種基本狀態(tài)。

引入線程后,進程的內(nèi)涵發(fā)生了改變,進程只作為除CPU以外系統(tǒng)資源的分配單元,線程則作為處理機的分配單元。

線程與進程的比較

  • 1) 調(diào)度
    在傳統(tǒng)的操作系統(tǒng)中,擁有資源和獨立調(diào)度的基本單位都是進程。在引入線程的操作系統(tǒng)中,線程是獨立調(diào)度的基本單位,進程是資源擁有的基本單位。在同一進程中,線程的切換不會引起進程切換。在不同進程中進行線程切換,如從一個進程內(nèi)的線程切換到另一個進程中的線程時,會引起進程切換。

  • 2) 擁有資源
    不論是傳統(tǒng)操作系統(tǒng)還是設(shè)有線程的操作系統(tǒng),進程都是擁有資源的基本單位,而線程不擁有系統(tǒng)資源(也有一點必不可少的資源),但線程可以訪問其隸屬進程的系統(tǒng)資源。

  • 3) 并發(fā)性
    在引入線程的操作系統(tǒng)中,不僅進程之間可以并發(fā)執(zhí)行,而且多個線程之間也可以并發(fā)執(zhí)行,從而使操作系統(tǒng)具有更好的并發(fā)性,提高了系統(tǒng)的吞吐量。

  • 4) 系統(tǒng)開銷
    由于創(chuàng)建或撤銷進程時,系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、 I/O設(shè)備等,因此操作系統(tǒng)所付出的開銷遠大于創(chuàng)建或撤銷線程時的開銷。類似地,在進行進程切換時,涉及當(dāng)前執(zhí)行進程CPU環(huán)境的保存及新調(diào)度到進程CPU環(huán)境的設(shè)置,而線程切換時只需保存和設(shè)置少量寄存器內(nèi)容,開銷很小。此外,由于同一進程內(nèi)的多個線程共享進程的地址空間,因此,這些線程之間的同步與通信非常容易實現(xiàn),甚至無需操作系統(tǒng)的干預(yù)。

  • 5) 地址空間和其他資源(如打開的文件)
    進程的地址空間之間互相獨立,同一進程的各線程間共享進程的資源,某進程內(nèi)的線程對于其他進程不可見。

  • 6) 通信方面
    進程間通信(IPC)需要進程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性,而線程間可以直接讀/寫進程數(shù)據(jù)段(如全局變量)來進行通信。

線程的實現(xiàn)方式

線程的實現(xiàn)可以分為三類:用戶級線程(User-LevelThread, ULT)、內(nèi)核級線程(Kemel-LevelThread, KLT)(內(nèi)核支持的線程)和組合方式。

  • 1) 用戶級線程
    在用戶級線程中,有關(guān)線程管理的所有工作都由應(yīng)用程序完成,內(nèi)核意識不到線程的存在。應(yīng)用程序可以通過使用線程庫設(shè)計成多線程程序。通常,應(yīng)用程序從單線程起始,在該線程中開始運行,在其運行的任何時刻,可以通過調(diào)用線程庫中的派生例程創(chuàng)建一個在相同進程中運行的新線程。

  • 2) 內(nèi)核級線程
    在內(nèi)核級線程中,線程管理的所有工作由內(nèi)核完成,應(yīng)用程序沒有進行線程管理的代碼,只有一個到內(nèi)核級線程的編程接口。內(nèi)核為進程及其內(nèi)部的每個線程維護上下文信息,調(diào)度也是在內(nèi)核基于線程架構(gòu)的基礎(chǔ)上完成。

  • 3) 組合方式
    在一些系統(tǒng)中,使用組合方式的多線程實現(xiàn)。線程創(chuàng)建完全在用戶空間中完成,線程的調(diào)度和同步也在應(yīng)用程序中進行。一個應(yīng)用程序中的多個用戶級線程被映射到一些(小于或等于用戶級線程的數(shù)目)內(nèi)核級線程上。

多線程模型

有些系統(tǒng)同時支持用戶線程和內(nèi)核線程由此產(chǎn)生了不同的多線程模型,即實現(xiàn)用戶級線程和內(nèi)核級線程的連接方式。

  • 1) 多對一模型
    將多個用戶級線程映射到一個內(nèi)核級線程,線程管理在用戶空間完成。此模式中,用戶級線程對操作系統(tǒng)不可見(即透明)。
    優(yōu)點:線程管理是在用戶空間進行的,因而效率比較高。
    缺點:當(dāng)一個線程在使用內(nèi)核服務(wù)時被阻塞,那么整個進程都會被阻塞;多個線程不能并行地運行在多處理機上。

  • 2) 一對一模型
    將每個用戶級線程映射到一個內(nèi)核級線程。
    優(yōu)點:當(dāng)一個線程被阻塞后,允許另一個線程繼續(xù)執(zhí)行,所以并發(fā)能力較強。
    缺點:每創(chuàng)建一個用戶級線程都需要創(chuàng)建一個內(nèi)核級線程與其對應(yīng),這樣創(chuàng)建線程的開銷比較大,會影響到應(yīng)用程序的性能。

  • 3) 多對多模型
    將 n 個用戶級線程映射到 m 個內(nèi)核級線程上,要求 m <= n。
    特點:在多對一模型和一對一模型中取了個折中,克服了多對一模型的并發(fā)度不高的缺點,又克服了一對一模型的一個用戶進程占用太多內(nèi)核級線程,開銷太大的缺點。又擁有多對一模型和一對一模型各自的優(yōu)點,可謂集兩者之所長。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 又來到了一個老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個問題開始,來談?wù)劜?..
    tangsl閱讀 4,322評論 0 23
  • word直接復(fù)制來了,格式就不改了。至于這門課怎么復(fù)習(xí),只要平時實驗都認真完成、報告認真寫,平時分都很高;考試的話...
    Jozhn閱讀 4,907評論 0 8
  • 如果當(dāng)初我們沒有遇見 如果后來我們沒有分開 如果最后我們還在一起 我們會不會有一個好的結(jié)局
    自言醬閱讀 252評論 0 0
  • 陳詞濫調(diào)的青春里,我并沒有星光燦爛地,陽光明媚地,成為你的某某。 即便一人曾暗自神傷,撕心裂肺卻有面帶...
    中堂的世界閱讀 370評論 1 2
  • 看了貓老師的文章,激起了我寫作的欲望。雖然我語文成績一直不好,但是骨子里還有有一種當(dāng)文藝青年的夢想。 我是一個理科...
    王余新閱讀 168評論 0 0

友情鏈接更多精彩內(nèi)容