【Linux系統編程】線程基礎

     線程的概念

     線程是進程內部的一條執行序列,或者執行流。每個進程至少有一條線程,稱之爲主線程。從代碼的角度看,就是main函數的函數體。在主線程中可以通過線程庫創建其他函數線程。在同一個進程中的線程都是併發運行的,並且線程的執行順序由系統決定。

     主線程和函數線程沒有本質的區別,只是主線程是進程執行時的第一條線程。主線程默認結束,結束的是整個進程。

     線程的實現方式

     線程的實現方式有三種:用戶級、內核級、混合模式。

     用戶級線程:線程的創建、調度、銷燬都在用戶空間完成,內核只會識別其爲一個進程。同時,用戶態維護了一個線程表來管理線程。

     優點:1.靈活性強,操作系統不知道線程的存在,在任何平臺上都可以運行;2.線程的切換在用戶空間完成,不需要陷入內核,速度較快;3.不用修改操作系統,內核實現簡單。

     缺點:1.編程複雜,用戶必須自己管理線程,包括線程調度;2.如果一個線程阻塞,整個進程都會阻塞;3.不能使用對稱多處理器。

     內核級線程:線程的創建、管理、銷燬由操作系統內核完成。

     優點:1.內核線程使得用戶編程簡單;2.一條線程阻塞,操作系統可以立馬切換到另一條線程,整個進程不會阻塞。

     缺點:1.內核實現複雜,需要支持多線程;2.線程切換效率低,每次切換必須陷入內核。

     混合線程:線程一部分由用戶創建,一部分由內核創建,是一個多對多的關係,結合了用戶級和內核級的優點。

 

     進程和線程的區別

     1.線程是CPU調度的最小單位,進程是資源分配的最小單位。

     2.進程是線程的集合。進程中包含數據、資源,一個進程中的所有線程共享進程的數據、資源。

     3.線程創建、管理代價小。線程調度、切換效率較高。

 

     參考資料:《從哲學層次上看操作系統》 第5章 第3節

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章