linux2.0~2.4 : linuxthreads庫 每乙個執行實體都是task_struct結構, 對映 1: 1,但需要增加管理執行緒。對posix標準相容的不好。
已被nptl取代
linux2.6 : nptl(native posix threading library)
實現方式: 類似lwp(輕量級程序) 使用者執行緒:核心執行緒對映 1:1, 因為乙個pthread(
注: 這裡pthread正確理解應為一種使用者執行緒和核心執行緒的對映方式,之前理解為一種執行緒是錯誤的!
)建立最終呼叫clone函式
(fork()、vfork()最終也呼叫該函式)建立乙個核心可見的使用者執行緒且由核心排程(但該可見執行緒是否需要在核心中建立對應核心執行緒?), 目前被結合入glibc庫。
以上是linux執行緒庫的發展歷程。
還有兩類目前不用的:
1. 1:n 即多個使用者執行緒對應乙個核心程序,因為核心一次只能給乙個程序分配乙個cpu,其他執行緒只能等,不適合多處理器。此外如果乙個執行緒阻塞,該程序中的所有執行緒都被阻塞,直至該阻塞操作結束。
被拋棄。
2. 多對多 ngpt(next generation posix threads) 即m:n模型(m個執行緒對應n個核心級執行緒), 也就是說若干個執行緒可能是在同乙個執行實體上實現的,併發性較高,因此效能上有優勢。按照2023年3月ngpt官方**上的通知,ngpt考慮到nptl日益廣泛地為人所接受,為避免不同的執行緒庫版本引起的混亂,今後將不再進行進一步開發,而今進行支援性的維護工作。也就是說,ngpt已經放棄與nptl競爭下一代linux posix執行緒庫標準。
但在商業環境如unix上仍有應用。
參考 linux 執行緒實現機制分析 國防科技大學計算機學院」的「linux 執行緒實現機制分析」。
Linux同步機制 多執行緒開發總結
1 對於cpu開銷大的場景,能利用多核,就盡量利用多核 常常自以為某需求的運算量不大,且cpu足夠快,就偷懶寫個單執行緒,結果效率很低 2 使用多執行緒的時候,預設是加鎖的。在加鎖保證業務正常的條件下,再考慮優化互斥鎖帶來的效能損耗 互斥鎖 讀寫鎖 自旋鎖 無鎖 原子操作 3 減少執行緒之間的相關性...
linux 執行緒總結
1 同一程序執行緒的共享資源 a.堆 由於堆是在程序空間中開闢出來的,所以它是理所當然地被共享的 b.全域性變數 它是與具體某一函式無關的,所以也與特定執行緒無關 因此也是共享的 c.靜態變數雖然對於區域性變數來說,它在 中是 放 在某一函式中的,但是其存放位置和全域性變數一樣,存於堆中開闢的.bs...
15 執行緒等待通知機制總結
執行緒等待通知機制總結 概述 乙個執行緒的等待阻塞狀態,受另外乙個執行緒控制。object.wait object.notify 特點必須基於特定的物件鎖synchronized notify只會對已經處於wait狀態的執行緒生效。使用必須在synchronized obj 內部使用,否則會丟擲異常...