1. 程式人生 > >Linux執行緒技術的概念與技術發展

Linux執行緒技術的概念與技術發展


執行緒技術早在20世紀60年代就被提出,但真正應用多執行緒到作業系統中還是在20世紀80年代中期。現在,多執行緒技術已經被許多作業系統所支援,包括Windows NT/2000和Linux。

在1999年1月釋出的Linux 2.2核心中,程序是通過系統呼叫fork建立的,新的程序是原來程序的子程序。需要說明的是,在Linux 2.2.x中,不存在真正意義上的執行緒,Linux中常用的執行緒Pthread實際上是通過程序來模擬的。

也就是說,Linux中的執行緒也是通過fork建立的,是“輕”程序。Linux 2.2預設只允許4096個程序/執行緒同時執行,而高端系統同時要服務上千的使用者,所以這顯然是一個問題。它一度是阻礙Linux進入企業級市場的一大因素。

2001年1月釋出的Linux 2.4核心消除了這個限制,並且允許在系統執行中動態調整程序數上限。因此,程序數現在只受制於實體記憶體的多少。在高階伺服器上,即使只安裝了512MB記憶體,現在也能輕而易舉地同時支援1.6萬個程序。

在Linux 2.5核心中,已經做了很多改進執行緒效能的工作。在Linux 2.6中改進的執行緒模型仍然是由Ingo Molnar 來完成的。它基於一個1:1的執行緒模型(一個核心執行緒對應一個使用者執行緒),包括核心內在的對新NPTL(Native Posix Threading Library)的支援,這個新的NPTL是由Molnar和Ulrich Drepper合作開發的。

2003年12月釋出的Linux 2.6核心,對程序排程經過重新編寫,去掉了以前版本中效率不高的演算法。程序標識號(PID)的數目也從3.2萬升到10億。核心內部的大改變之一就是Linux的執行緒框架被重寫,以使NPTL可以執行其上。

Linux的另一種可選執行緒模型是IBM開發的NGPT(Next Generation Posix Threads for Linux),它是基於GNU Pth(GNU Portable Threads)專案而實現的M:N模型(M個使用者態執行緒對應N個核心態執行緒)。

NPTL的設計目標可歸納為以下幾點:POSIX相容性、SMP結構的利用、低啟動開銷、低連結開銷(即不使用執行緒的程式不應當受執行緒庫的影響)、與LinuxThreads應用的二進位制相容性、軟硬體的可擴充套件能力、多體系結構支援、NUMA支援,以及與C++整合等。

對於執行負荷繁重的執行緒應用Pentium Pro及更先進的處理器而言,這些是主要的效能提升,也是企業級應用中很多高端系統一直以來所期待的。執行緒框架的改變包含Linux執行緒空間中的許多新的概念,包括執行緒組、執行緒各自的本地儲存區、POSIX風格訊號,以及其它改變。改進後的多執行緒和記憶體管理技術有助於更好地執行大型多媒體應用軟體。