使用者級執行緒和核心級執行緒的區別
1 核心級執行緒:切換由核心控制,當執行緒進行切換的時候,由使用者態轉化為核心態。切換完畢要從核心態返回使用者態;可以很好的利用smp,即利用多核cpu。windows執行緒就是這樣的。
2 使用者級執行緒核心的切換由使用者態程式自己控制核心切換,不需要核心干涉,少了進出核心態的消耗,但不能很好的利用多核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)使用者級執行緒的程式實體是執行在使用者態下的程式,而核心支援執行緒的程式實體則是可以執行在任何狀態下的程式。
核心執行緒的優點:
(1)當有多個處理機時,一個程序的多個執行緒可以同時執行。
缺點:
(1)由核心進行排程。
使用者程序的優點:
(1) 執行緒的排程不需要核心直接參與,控制簡單。
(2) 可以在不支援執行緒的作業系統中實現。
(3) 建立和銷燬執行緒、執行緒切換代價等執行緒管理的代價比核心執行緒少得多。
(4) 允許每個程序定製自己的排程演算法,執行緒管理比較靈活。
(5) 執行緒能夠利用的表空間和堆疊空間比核心級執行緒多。
(6) 同一程序中只能同時有一個執行緒在執行,如果有一個執行緒使用了系統呼叫而阻塞,那麼整個程序都會被掛起。另外,頁面失效也會產生同樣的問題。
(1)資源排程按照程序進行,多個處理機下,同一個程序中的執行緒只能在同一個處理機下分時複用
參考資料:使用者級執行緒和核心級執行緒的區別
使用者級執行緒和核心級執行緒的區別
1 核心級執行緒:切換由核心控制,當執行緒進行切換的時候,由使用者態轉化為核心態。切換完畢要從核心態返回使用者態;可以很好的利用smp,即利用多核cpu。windows執行緒就是這樣的。
2 使用者級執行緒核心的切換由使用者態程式自己控制核心切換,不需要核心干涉,少了進出核心態的消耗,但不能很好的利用多核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)使用者級執行緒的程式實體是執行在使用者態下的程式,而核心支援執行緒的程式實體則是可以執行在任何狀態下的程式。
核心執行緒的優點:
(1)當有多個處理機時,一個程序的多個執行緒可以同時執行。
缺點:
(1)由核心進行排程。
使用者程序的優點:
(1) 執行緒的排程不需要核心直接參與,控制簡單。
(2) 可以在不支援執行緒的作業系統中實現。
(3) 建立和銷燬執行緒、執行緒切換代價等執行緒管理的代價比核心執行緒少得多。
(4) 允許每個程序定製自己的排程演算法,執行緒管理比較靈活。
(5) 執行緒能夠利用的表空間和堆疊空間比核心級執行緒多。
(6) 同一程序中只能同時有一個執行緒在執行,如果有一個執行緒使用了系統呼叫而阻塞,那麼整個程序都會被掛起。另外,頁面失效也會產生同樣的問題。
缺點:
(1)資源排程按照程序進行,多個處理機下,同一個程序中的執行緒只能在同一個處理機下分時複用
參考資料:使用者級執行緒和核心級執行緒的區別