核心執行緒與使用者執行緒的區別

2021-06-08 16:36:46 字數 800 閱讀 9396

根據作業系統核心是否對執行緒可感知,可以把執行緒分為核心執行緒和使用者執行緒。

核心執行緒建立和銷毀都是由作業系統負責、通過系統呼叫完成的,作業系統在排程時,參考各程序內的執行緒運**況做出排程決定,如果乙個程序中沒有就緒態的執行緒,那麼這個程序也不會被排程占用cpu。

和核心執行緒相對應的是使用者執行緒,使用者執行緒指不需要核心支援而在使用者程式中實現的執行緒,其不依賴於作業系統核心,使用者程序利用執行緒庫提供建立、同步、排程和管理執行緒的函式來控制使用者執行緒。使用者執行緒多見於一些歷史悠久的作業系統,例如unix作業系統,不需要使用者態/核心態切換,速度快,作業系統核心不知道多執行緒的存在,因此乙個執行緒阻塞將使得整個程序(包括它的所有執行緒)阻塞。由於這裡的處理器時間片分配是以程序為基本單位,所以每個執行緒執行的時間相對減少為了在作業系統中加入執行緒支援,採用了在使用者空間增加執行庫來實現執行緒,這些執行庫被稱為「執行緒包」,使用者執行緒是不能被作業系統所感知的。

引入使用者執行緒,具體而言,有以下四個方面的優勢:

(1)       可以在不支援執行緒的作業系統中實現。

(2)       建立和銷毀執行緒、執行緒切換代價等執行緒管理的代價比核心執行緒少得多。

(3)       允許每個程序定製自己的排程演算法,執行緒管理比較靈活。

(4)       執行緒能夠利用的表空間和堆疊空間比核心級執行緒多。

使用者執行緒的缺點主要有以下兩點:

(1)       同一程序中只能同時有乙個執行緒在執行,如果有乙個執行緒使用了系統呼叫而阻塞,那麼整個程序都會被掛起。

(2)       頁面失效也會產生類似的問題。

核心執行緒的優缺點剛好跟使用者執行緒相反。實際上,作業系統可以使用混合的方式來實現執行緒。

核心級執行緒與使用者級執行緒

這兩天在寫這篇blog的時候,順帶複習作業系統的資料,遇到了乙個之前沒有弄明白的問題,就是關於核心級執行緒與使用者級執行緒。在查閱了一些資料之後,發表一下我個人簡介。執行緒已經在許多系統中實現,到那時各個作業系統實現方式不完全相同。kst 核心支援執行緒是在核心空間實現的 核心為每個執行緒在核心空間...

Linux使用者級執行緒和核心級執行緒區別

1 執行緒的建立 撤銷和切換等,都需要核心直接實現,即核心了解每乙個作為可排程實體的執行緒。2 這些執行緒可以在全系統內進行資源的競爭。3 核心空間內為每乙個核心支援執行緒設定了乙個執行緒控制塊 tcb 核心根據該控制塊,感知執行緒的存在,並進行控制。在一定程度上類似於程序,只是建立 排程的開銷要比...

執行緒模型 使用者級執行緒與核心級執行緒介紹與對比

使用者級執行緒 一 概述 使用者級執行緒的實現就是把整個執行緒實現部分放在使用者空間中,核心對執行緒一無所知,核心看到的就是乙個單執行緒程序。對於執行緒的底層實現,現在很少有作業系統會使用單純的使用者級執行緒這中線程模型來實現。注 對於實現的是使用者級執行緒的作業系統而言,cpu 排程的基本單位看起...