? ? ? ?線程的兩種實現方式——內核支持線程(kernal Supported Thread, KST), 用戶級線程(User Level Thread, ULT)
1. 內核支持線程
? ? ? ? 顧名思義,內核支持線程即為在內核支持下的那些線程,它們的創建,阻塞,撤銷和切換等,都是在內核空間中進行的。
? ? ? ? 假如系統中設置的是內核支持線程,則調度便是以線程為單位進行的。
該線程實現方式的優點:
(1)在多線程處理器系統中,內核能夠同時調度同一進程中的多個線程并行執行。
(2)如果一個進程中的線程阻塞了,內核可以調用該進程下的其他線程占用處理器,也可調用其他進程的線程。
(3)內核支持線程具有最小的數據結構和堆棧,線程的切換比較快,開銷小。
(4)內核本身也可以采用多線程技術,可以提高線程的執行速度和效率。
該線程實現方式的缺點:
????????對于用戶的線程切換而言,其模式切換的開銷較大,在同一進程內,從一個線程切換到另一個線程時,需要從用戶態轉到內核態進行,這是因為用戶進程的線程在用戶態運行,而線程調度和管理是在內核實現的,系統開銷較大。
2. 用戶級線程
? ? ? ? 用戶級線程實在用戶空間中實現的。對線程的創建,撤銷,同步與通信等,都無需內核的支持,即用戶級線程與內核無關。在一個系統中的用戶級線程的數目可以到達數百個乃至數千個。
? ? ? ? 對于設置了用戶級線程的系統,其調度仍是以進程為單位進行的。
? ? ? ? 在進行跨進程調度時,用戶級線程需要內核支持。
? ? ? ? 該線程實現方式的優點:
(1)線程的切換無需轉換到內核空間,從而節省了模式切換的開銷。
(2)調度算法可以是線程專用的。
(3)用戶級線程的實現與OS平臺無關,因為對于線程管理的代碼是屬于用戶程序的一部分,所有的應用程序都可以對之進行共享。
? ? ? ? 該線程實現方式的缺點:
(1)系統阻塞調用問題。當線程執行一個系統調用時,不僅該線程被阻塞,該進程的所有線程都會被阻塞。而在內核支持線程中,則該進程中的其他線程仍然可以運行。
(2)在單純的用戶級線程實現方式中,多線程應用不能利用多處理機進行多重處理的優點,內核每次分配給一個進程的僅有一個CPU,因此,進程中僅有一個線程能執行,在該線程放棄CPU之前,其他線程只能等待。