線程的實現
線程的實現方式
1. 內核支持線程KST(Kernel supported threads)
- 內核支持線程同進程一樣都是在內核支持下運行的, 與內核密切相關
- 創建, 阻塞, 撤銷, 切換都是在內核空間實現的
- 內核空間中爲每一個線程設置了一個線程控制塊, 內核通過線程控制塊對其進行控制
優點
- 在多處理器系統中內核可以同時調度同一進程中的多個線程併發執行
- 如果進程中的一個線程阻塞了, 內核可繼續調度該進程中的其他線程
缺點
- 同一進程中切換線程開銷較大, 因爲要經歷用戶態, 內核態的切換
2. 用戶級線程ULT(User level threads)
- 用戶級線程與內核無關
- 創建, 撤銷, 同步和通信等功能都是在用戶空間中實現的.
- 調度以進程爲單位
優點
- 線程切換不需要轉換內核狀態, 節省了切換的開銷
- 不同的進程可根據自身選擇不同的調度算法
- 用戶級線程的實現與OS平臺無關
缺點
- 當一個線程阻塞時, 其他所有的線程都被阻塞
- 不能利用多處理機的優點
3. 組合方式
將以上兩種線程的方式結合, 形成組合方式線程.
組合方式線程支持多個內核支持線程和用戶級線程的建立, 調度和管理.
結合上述兩種線程的優點, 形成了三種不同的模型
1. 多對一模型
將用戶線程映射到一個內核控制線程, 當用戶線程需要訪問內核時, 將其映射到一個內核線程, 但每次只允許一個線程進行映射.主要的優點是開銷小, 效率高, 缺點在於一個線程在訪問內核時發生阻塞, 則整個進程都會被阻塞. 且同一時刻只有一個線程可以訪問內核
2. 一對一模型
每一個用戶級線程都映射到一個內核控制線程. 主要的優點是當一個線程阻塞, 允許其他線程繼續運行. 且允許多個線程並行地運行在多處理機系統上. 缺點是開銷較大
3. 多對多模型
將多個用戶線程映射到同樣數量或者更少數量的內核線程上,可以根據實際情況調整內核控制線程數目, 結合了上述兩種模型的優點.