操作系统(十二)线程的实现方式、多线程模型
生活随笔
收集整理的這篇文章主要介紹了
操作系统(十二)线程的实现方式、多线程模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.1.6 線程的實現方式、多線程模型
目錄
2.1.6 線程的實現方式、多線程模型
2.1.6.1 線程的實現方式
2.1.6.2 多線程模型
2.1.6.1 線程的實現方式
? 線程已在許多系統中實現,但各系統的實現方式并不完全相同。在有的系統中,特別是一些數據庫管理系統,所實現的是用戶級線程;而另一些系統所實現的是內核級線程; 還有一些系統如 Solaris 操作系統,則同時實現了這兩種類型的線程。? 用戶級線程:在早期的操作系統中只支持進程還不支持線程,線程這一功能的實現是采取代碼書寫的線程庫來實現的。 ? 在這時,“線程”其實就是一行行代碼,線程庫的實現就類似于代碼的調用,因此此時的用戶級線程就運行在用戶態中。下面這個代碼中while語句的作用實際就相當于線程庫。 int main(){int num;while(true){if(num==1){線程1;}if(num==2){線程2;}if(num==3){線程3;}} } ? 根據上面這種圖我們可以看出,用戶級線程的管理工作(創建,切換,撤銷等)均有應用程序來完成,不需要操作系統的介入。從用戶的角度來看,確實可以感受到多個線程的存在(因為有直觀的代碼邏輯),但是在操作系統看來,操作系統并意識不到有多個用戶級線程的存在。所以,“用戶級線程”就是“從用戶視角看能看到的線程”。 這種用戶級線程的優點十分明顯:進程切換較快,線程管理的系統開銷較小,效率高。但是如果某一線程被阻塞了,那么整個進程都會停滯不前,而且因為用戶級線程是用代碼書寫的所以這些代碼不能在多核處理機上并發,只能在一個處理及上執行,這也是用戶級線程的一個缺點。 內核級線程:無論是用戶進程中的線程,還是系統進程中的線程,他們的創建、撤消和切換等也是依靠內核,在內核空間實現的。 相較于用戶級線程,從下圖中我們可以看到:內核級線程的管理工作(創建,切換,撤銷等)均有操作系統內核來完成,所以內核級線程的切換必須進入核心態才能完成。每個內核級線程都會有一個TCB(Thread Control Block,線程控制塊),通過TCB操作系統可以對內核級線程進行管理,所以,“內核級線程”就是“從操作系統內核視角看能看到的線程”。?與用戶級線程的優缺點正好相反,內核級線程的缺點是進程切換較慢,線程管理的系統開銷較大。同時如果某一線程被阻塞了,別的線程可以繼續并發執行,同時不同的線程還可以進入不同的處理機運行,這是他的優點。
2.1.6.2 多線程模型
? 一對一模型:該模型是為每一個用戶線程都設置一個內核控制線程與之連接,當一個線程阻塞時,允許調度另一個線程運行。在多處理機系統中,則有多個線程并行執行。該模型并行能力較強,但每創建一個用戶線程相應地就需要創建一個內核線程,開銷較大,因此需要限制整個系統的線程數。
多對一模型:多個用戶級線程映射到一個內核級線程。且一個進程只被分配一個內核級線程。
? 該模型的主要優點是線程管理的開銷小,效率高;但當一個線程在訪問內核時發生阻塞,則整個進程都會被阻塞,而且在多處理機系統中,一個進程的多個線程無法實現并行。? 這里我們需要知道:操作系統只“看得見”內核級線程,因此只有內核級線程才是處理機分配的單位。
? 多對多模型:用戶級線程映射到 m 個內核級線程(n >= m)。每個用戶進程對應 m 個內核級線程。
對于這個多對多模型,一個線程阻塞并不會引起整個進程阻塞,只有這兩個線程同時阻塞才會將進程阻塞,因此多對多線程模型的并發性較好。因為內核級線程才是處理機分配的基本單位,所以這個多對多模型最多被分配兩個處理機。總結
以上是生活随笔為你收集整理的操作系统(十二)线程的实现方式、多线程模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统(十一)线程的概念和特点
- 下一篇: 竞品分析竞的是思维