Native POSIX Thread Library
Native POSIX Thread Library(NPTL)是Linux內核中實踐POSIX Threads標準的函式庫。
測試表明,NPTL能夠成功地在IA-32平台上在兩秒鐘內生成100,000個線程;相應的沒有NPTL的內核將耗費15分鐘左右。[1][2]
歷史
[編輯]在Linux內核2.6出現之前行程是(最小)可排程的對象,當時的Linux不真正支援線程。但是Linux內核有一個系統呼叫指令clone(),這個指令產生一個呼叫呼叫的進程的復件,而且這個復件與原進程使用同一地址空間。LinuxThreads計劃使用這個系統呼叫來提供一個內核級的線程支援。但是這個解決方法與真正的POSIX標準有一些不相容的地方,尤其是在訊號處理、行程排程和行程間同步原語方面。
要提高LinuxThreads的效應很明顯需要提供內核支援以及必須重寫線程函數庫。為了解決這個問題出現了兩個互相競爭的專案:一個IBM的組的專案叫做NGPT(Next Generation POSIX Threads,下一代POSIX線程),另一個組是由Red Hat程式設計師組成的。2003年中NGPT被放棄,幾乎與此同時NPTL公佈了。
NPTL首次是隨Red Hat Linux 9發表的。此前老式的Linux POSIX線程偶爾會發生系統無法產生線程的毛病,這個毛病的原因是因為在新線程開始的時候系統沒有藉機先佔。當時的Windows系統對這個問題的解決比較好。Red Hat在關於Red Hat Linux 9上的Java的網頁上發表了一篇文章稱NPTL解決了這個問題[3]。
從第3版開始NPTL是Red Hat Enterprise Linux的一部分,從Linux內核2.6開始它被納入內核。目前它完全被結合入GNU C 函式庫。
設計
[編輯]NPTL的解決方法與LinuxThreads類似,內核看到的首要抽象依然是一個進程,新線程是通過clone()系統呼叫產生的。但是NPTL需要特殊的內核支援來解決同步的原始類型之間互相競爭的狀況。在這種情況下線程必須能夠入眠和再復甦。用來完成這個任務的原始類型叫做futex。
NPTL是一個所謂的1×1線程函數庫。用戶產生的線程與內核能夠分配的物件之間的聯絡是一對一的。這是所有線程程式中最簡單的。
參考資料
[編輯]- ^ 引入2.6内核. [2008-08-12]. (原始內容存檔於2012-01-21).
- ^ The Native POSIX Thread Library for Linux (PDF). [2008-08-12]. (原始內容存檔 (PDF)於2012-01-21).
- ^ Red Hat Linux 9 and Java 2 Platform, Standard Edition 1.4.2: A Winning Combination. [2008-12-13]. (原始內容存檔於2009-02-08).