使用者執行緒和核心執行緒概述與總結

2021-08-26 18:05:03 字數 1697 閱讀 1092

執行緒的實現可以分為兩類:使用者級執行緒(user-level thread)和核心線執行緒(kernel-level thread),後者又稱為核心支援的執行緒或輕量級程序。

使用者執行緒:指不需要核心支援而在使用者程式中實現的執行緒,其不依賴於作業系統核心。

優點:

排程無需核心參與 

不支援執行緒的os中也能實現 

執行緒建立、銷毀、切換、管理的代價比核心執行緒少得多 

每個程序可定製自己的排程演算法,執行緒管理靈活 

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

缺點:

資源排程按照程序進行,多個處理器時,同乙個程序中的執行緒只能在同乙個處理器下分時復用 

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

核心執行緒:由作業系統核心建立和撤銷。核心維護程序及執行緒的上下文資訊以及執行緒切換。乙個核心執行緒由於i/o操作而阻塞,不會影響其它執行緒的執行。當執行緒進行切換的時候,由使用者態轉化為核心態。切換完畢要從核心態返回使用者態,即存在使用者態和核心態之間的轉換,比如多核cpu,還有win執行緒的實現

優點:

在多處理器系統中,核心能夠同時排程同一程序中多個執行緒並行執行到多個處理器中。

如果程序中的乙個執行緒被阻塞,核心可以排程同乙個程序中的另乙個執行緒。

核心支援執行緒具有很小的資料結構和堆疊,執行緒的切換比較快,切換開銷小。

核心本身也可以使用多執行緒的方式來實現。

缺點:

即使cpu在同乙個程序的多個執行緒之間切換,也需要陷入核心,因此其速度和效率不如使用者級執行緒。

特點:

有了核心執行緒,每個使用者執行緒被對映或繫結到乙個核心執行緒。使用者執行緒在其生命期內都會繫結到該核心執行緒。一旦使用者執行緒終止,兩個執行緒都將離開系統。這被稱作"一對一"執行緒對映。(反過來,乙個核心執行緒不一定就會對應乙個使用者執行緒)。一般一直使用api或者是系統呼叫建立的執行緒均為一對一執行緒。例如,linux使用clone建立的執行緒,以及win下使用createthread建立的執行緒。linux系統中pthread建立的是核心執行緒而非使用者執行緒。

弊端:

核心執行緒數量有限.

許多作業系統核心執行緒呼叫的時候,上下文切換的開銷很大。

混合執行緒實現是使用者執行緒和核心執行緒的交叉,使得庫和作業系統都可以管理執行緒。使用者執行緒由執行時庫排程器管理,核心執行緒由作業系統排程器管理。在這種實現中,程序有著自己的核心執行緒池。可執行的使用者執行緒由執行時庫分派並標記為準備好執行的可用執行緒。作業系統選擇使用者執行緒並將它對映到執行緒池中的可用核心執行緒。多個使用者執行緒可以分配給相同的核心執行緒。

特點:

多對一的模型將多個使用者執行緒對映到乙個核心執行緒。

多對一模型執行緒的切換速度要快很多(執行緒之間的切換由使用者**來執行)

弊端:

如果其中乙個執行緒阻塞,那麼所有執行緒將無法執行。

特點:

將上述兩種模型的特點進行綜合,即將多個使用者執行緒對映到少數但不只乙個核心執行緒中去。

多對多模型對使用者執行緒的數量沒有什麼限制,在多處理器系統上也會有一定的效能提公升,不過提公升的幅度比不上一對一模型。

核心執行緒和使用者態執行緒

讀書看到下面這一段,不太理解,就搜了一下,學了很多東西。img 執行緒的實現可以分為兩類 使用者級執行緒 user level thread 和核心線執行緒 kernel level thread 後者又稱為核心支援的執行緒或輕量級程序.使用者執行緒指不需要核心支援而在使用者程式中實現的執行緒,其不...

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

根據在使用者空間還是在核心實現多執行緒機制,執行緒又被分為使用者級執行緒 user level thread 和核心級執行緒 kernel level thread 有關執行緒的所有管理工作都有在使用者級實現的執行緒庫來支援。使用者級執行緒庫是用於使用者級執行緒管理的例程包,支援執行緒的建立 終止,...

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

執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現之間的較大的區別之一就是它們的模式以及要指...