首頁  >  文章  >  內核級執行緒運行速度更快

內核級執行緒運行速度更快

(*-*)浩
(*-*)浩原創
2019-12-25 14:47:233699瀏覽

內核級執行緒運行速度更快

核心級執行緒:切換由核心控制,當執行緒進行切換的時候,由使用者態轉換為核心態。切換完畢要從核心態傳回用戶態;可以很好的利用smp,即利用多核心cpu。 windows線程就是這樣的。 (推薦學習:phpstorm

用戶級線程內核的切換由用戶態程式自己控制內核切換,不需要內核干涉,少了進出內核態的消耗,但不能很好的利用多核心Cpu,目前Linux pthread大體是這麼做的。

線程的實作可以分為兩類:用戶級線程(User-Level Thread)和內核線線程(Kernel-Level Thread),後者又稱為核心支援的線程或輕量級進程。在多線程作業系統中,各個系統的實現方式並不相同,在有的系統中實現了用戶級線程,有的系統中實現了內核級線程。

用戶線程指不需要內核支援而在用戶程式中實現的線程,其不依賴作業系統核心,應用程式利用線程庫提供創建、同步、調度和管理線程的函數來控制使用者線程。

不需要使用者態/核心態切換,速度快,作業系統核心不知道多執行緒的存在,因此一個執行緒阻塞將使得整個行程(包括它的所有執行緒)阻塞。由於這裡的處理器時間片分配是以行程為基本單位,所以每個執行緒執行的時間相對減少。

核心執行緒:由作業系統核心建立和撤銷。內核維護程序及執行緒的上下文資訊以及執行緒切換。一個核心執行緒由於I/O操作而阻塞,不會影響其它執行緒的運行。 Windows NT和2000/XP支援核心執行緒。

使用者執行緒運行在一個中間系統上面。目前中間系統實作的方式有兩種,即運行時系統(Runtime System)和核心控制執行緒。

「運行時系統」實質上是用於管理和控制執行緒的函數集合,包括建立、撤銷、執行緒的同步和通訊的函數以及調度的函數。這些函數都駐留在使用者空間作為使用者執行緒和核心之間的介面。

使用者執行緒不能使用系統調用,而是當執行緒需要係統資源時,將請求傳送給執行時,由後者透過對應的系統調用來取得系統資源。

核心控制線程:系統在分給進程幾個輕型進程(LWP),LWP可以透過系統呼叫來獲得核心提供的服務,而進程中的用戶執行緒可透過複用來關聯到LWP,從而得到內核的服務。

以下是用戶級執行緒和核心級執行緒的區別:

(1)內核支援執行緒是OS內核可感知的,而用戶級執行緒是OS內核不可感知的。

(2)用戶級線程的創建、撤消和調度不需要OS內核的支持,是在語言(如Java)這一級處理的;而內核支持線程的創建、撤消和調度都需OS核心提供支持,而且與進程的創建、撤消和調度大體是相同的。

(3)用戶級執行緒執行系統呼叫指令時將導致其所屬程序中斷,而核心支援執行緒執行系統呼叫指令時,只導致該執行緒中斷。

(4)在只有用戶級線程的系統內,CPU調度還是以進程為單位,處於運行狀態的進程中的多個線程,由用戶程式控制線程的輪換運行;在有核心支持在執行緒的系統內,CPU調度則以執行緒為單位,由OS的執行緒調度程式負責執行緒的調度。

(5)使用者層級執行緒的程式實體是執行在使用者狀態下的程序,而核心支援執行緒的程式實體則是可以運行在任何狀態下的程式。

以上是內核級執行緒運行速度更快的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn