Linux系統編程——用戶級線程和內核級線程區別

Linux用戶級線程和內核級線程區別

線程的實現能夠分爲兩類:用戶級線程和內核級線程。linux

在用戶級線程中,有關線程管理的全部工做都由應用程序完成,內核意識不到線程的存在。應用程序能夠經過使用線程庫設計成多線程程序。編程

在內核級線程中,線程管理的全部工做都由內核完成,應用程序沒有進行線程管理的代碼,只有一個到內核級線程的編程接口。內核爲進程及內部的每一個線程維護上下文信息,調度也在內核基於線程架構的基礎上完成。多線程

  • 區別
  1. 內核級線程:

(1)線程的建立、撤銷和切換等,都須要內核直接實現,即內核瞭解每個做爲可調度實體的線程。
(2)這些線程能夠在全系統內進行資源的競爭
(3)內核空間內爲每個內核支持線程設置了一個線程控制塊(TCB),內核根據該控制塊,感知線程的存在,並進行控制
在必定程度上相似於進程,只是建立、調度的開銷要比進程小。有的統計是1:10架構

  1. 用戶級線程:

(1)用戶級線程僅存在於用戶空間。
(2)內核並不能看到用戶線程。
(3)內核資源的分配仍然是按照進程進行分配的;各個用戶線程只能在進程內進行資源競爭併發

  • 多線程模型:

一、多對一模型性能

將多個用戶級線程映射到一個內核級線程,線程管理在用戶空間完成。用戶級線程對操做系統不可見(透明)。操作系統

優勢:線程管理是在用戶空間進行的,於是效率比較高線程

缺點:一個線程在使用內核服務時被阻塞,整個進程都會被阻塞。設計

二、一對一模型blog

將每一個用戶級線程映射到一個內核級線程。

優勢:當一個線程被阻塞時,容許另外一個線程繼續運行,併發能力強。

缺點:每建立一個用戶級線程都須要建立一個內核級線程與其對應,這樣建立線程的開銷比較大,會影響到應用程序的性能。

三、多對多模型

將n個用戶級線程映射到m個內核級線程上,要求m<=n;

特色:前二者的折中。

相關文章
相關標籤/搜索