(1)內核支持線程是OS內核可感知的,而用戶級線程是OS內核不可感知的。
(2)用戶級線程的創建、撤消和調度不需要OS內核的支持,是在語言(如Java)這一級處理的;而內核支持線程的創建、撤消和調度都需OS內核提供支持,而且與進程的創建、撤消和調度大體是相同的。
(3)用戶級線程執行系統調用指令時將導致其所屬進程被中斷,而內核支持線程執行系統調用指令時,只導致該線程被中斷。
(4)在只有用戶級線程的系統內,CPU調度還是以進程為單位,處於運行狀態的進程中的多個線程,由用戶程序控制線程的輪換運行;在有內核支持線程的系統內,CPU調度則以線程為單位,由OS的線程調度程序負責線程的調度。
(5)用戶級線程的程序實體是運行在用戶態下的程序,而內核支持線程的程序實體則是可以運行在任何狀態下的程序。
內核線程的優點:
(1)當有多個處理機時,一個進程的多個線程可以同時執行。
缺點:
(1)由內核進行調度。
用戶進程的優點:
(1) 線程的調度不需要內核直接參與,控制簡單。
(2) 可以在不支持線程的操作系統中實現。
(3) 創建和銷毀線程、線程切換代價等線程管理的代價比內核線程少得多。
(4) 允許每個進程定制自己的調度算法,線程管理比較靈活。這就是必須自己寫管理程序,與內核線程的區別
(5) 線程能夠利用的表空間和堆棧空間比內核級線程多。
(6) 同一進程中只能同時有一個線程在運行,如果有一個線程使用了系統調用而阻塞,那么整個進程都會被掛起。另外,頁面失效也會產生同樣的問題。
缺點:
(1)資源調度按照進程進行,多個處理機下,同一個進程中的線程只能在同一個處理機下分時復用