线程实现模型
線程實現模型
線程實現模型主要分為:用戶級線程模型,內核級線程模型和兩級線程模型。他們的區別在于線程與內核線程之間的對應關系。
以下我們將分析這三種線程實現模型的特點:
用戶級線程模型
(1)多對一關系
用戶級線程模型為多對一關系。即,一個進程中的所有線程對應一個內核線程;
(2)處理速度快、移植性強;
線程的創建、調度、同步等操作由應用程序來處理,不需要讓CPU從用戶態切換到內核態。所以用戶級線程模型在速度快,且移植性強;
(3)并非真正的并發運行
如果線程IO操作過程中被阻塞,那么用戶空間的其他線程都會被阻塞,因為這些線程無法被內核調度。
內核級線程模型
(1)一對一關系
內核級線程模型為一對一關系,一個用戶線程對應一個內核線程;
(2)資源消耗較大,速度較慢
進程對線程的創建、終止、切換和同步都必須通過內核提供的系統調用來完成,對內核的調度的調度器造成很大的負擔;
(3)是真正的并發運行
用戶線程和內核線程是一對一的關系,線程由內核來管理和調度。當某一線程阻塞時候,不會影響到其他線程。
兩級線程模型
(1)多對多的關系
兩級線程模型是集前面兩種模型的優點而設計的,是多對多的關系;
(2)資源消耗較小,速度較快,是真正的并發運行
兩級線程模型中,一個進程對應多個內核線程,進程中的線程由程序管理和調度并通過映射關系映射到內核線程上。這樣即便有線程阻塞后,也不會影響到其他線程;
(3)實現的復雜度大
用戶線程與內核線程的映射關系需要程序來實現,實現的復雜度大。幸運的是,Golang為我們實現了兩級線程模型,這使得它在處理并發問題上更有優勢。
轉載于:https://www.cnblogs.com/FireworksEasyCool/p/11508342.html
總結
- 上一篇: 基于改进SSD算法的小目标检测与应用
- 下一篇: SSM:Cause: java.sql.