linux執行緒基礎概念及多執行緒程式設計

2021-08-31 20:59:14 字數 1869 閱讀 9570

首先,linux中並不存在真在的執行緒。linux中的執行緒是使用程序來模擬的。在乙個程序需要同時執行多個執行流時,linux並不是開闢多個執行緒來執行,而是通過多個程序來模擬多個執行緒。

首先先看一下張圖:

此時共有4個執行緒屬於同乙個程序,他們的task_struct(linux中為pcb)不同,但是對映的虛擬位址空間和頁表是相同的。所以說linux中的的執行緒就是——多個pcb對映同一塊虛擬位址空間,使得同乙個程序中不同的執行流能夠同時執行。因此可以總結出同一程序不同執行緒的資源分配情況:

共享私有

虛擬位址空間中的**段、資料段

執行緒id

檔案描述符表(乙個執行緒開啟了檔案,其他執行緒也可以看到此檔案的描述符)

一組暫存器(儲存著此執行緒的上下文資訊,上下文中儲存著各種計數器的值,程式計數器和棧指標)

每種訊號的處理方式

棧(執行時棧)

在同乙個工作目錄下

errno(執行緒異常退出時的錯誤退出碼)

使用者id和執行緒組id

訊號遮蔽字

排程優先順序

乙個很少被外部事件阻塞的計算密集型執行緒往往無法與其他執行緒共享乙個處理器。如果計算密集型執行緒的數量比可用的處理器多,那麼就有可能造成較大的效能損失,這裡的效能損失指的是作業系統增加了額外的同步和排程開銷,而可用的資源不變。

由於執行緒是共享同一塊虛擬位址空間的,在執行期間,因時間分配上的細微偏差或者因共享了不該共享的變數而造成不良影響的可能性是很大的,也就是說執行緒之間是缺乏保護的。

執行緒共用同一塊虛擬位址空間,勢必在處理多執行緒時會有訪問同乙個資源等問題,此時就涉及到共享資源的處理。

nlwp:當前執行緒組中的執行緒個數。

程序是資源分配的單位,執行緒是系統排程的基本單位。

bash中輸入ps -al | grep your_thread_name     (l表示檢視執行緒)此命令可以檢視同一程序的所有執行緒。

系統列印出的tid轉成16進製制之後可以看到,tid本質上來說就是位址。

lwp:執行緒又被稱作lwp(light weightedprocess)輕量級程序。是執行緒的id,是使用gettid()函式的返回值。鏈結執行緒庫函式的時候,需要使用「-ipthread」選項

與執行緒有關的函式,大多數是以pthread_開頭的

執行緒組(tgid):由於執行緒概念的引入,乙個程序可能對應多個pcb,posix標準又要求所有的執行緒在呼叫getpid函式的時候返回相同的程序id,所以就有了執行緒組的概念。

使用者層面看到的pid,對應的是底層核心中的tgid。而使用者層面的tid,對應在核心之中則是pid欄位。

乙個使用者態的程序,內部對應著n個pcb,tgid通常是執行緒組的第乙個執行緒(主線程)

lwp實則是pid。

執行緒組中的第乙個執行緒,在使用者態被稱為主線程,在核心中被稱為group leader。核心在建立第乙個執行緒的時候,會將執行緒組的id值,設定成第乙個執行緒的執行緒id,group_leader指標則指向自身,即主線執行緒的程序描述符。

執行緒租內存在乙個執行緒,它的id等於程序id,而該執行緒就是該執行緒組的主程序。

執行緒沒有父子的概念,只有主線程,沒有父子執行緒之分

程式開始執行之後,哪個程序先執行由排程機決定,執行緒也是同理

pythread_self()函式可以用來獲取當前執行緒自身的tid。

是posix的執行緒標準,它定義了一套建立和操縱執行緒的一套api,以pthread.h標頭檔案和乙個執行緒庫來實現,而且其中的函式均以「pthead_」開頭。gcc或g++在鏈結這些執行緒函式庫的時候,需要使用「-ipthread」選項(pthread是共享庫檔案)。

執行緒等待:

mutex(互斥量)

條件變數函式

java多執行緒 基礎概念

join 方法 在很多情況下,主線程生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主線程往往將於子執行緒之前結束,但是如果主線程處理完其他的事務後,需要用到子執行緒的處理結果,也就是主線程需要等待子執行緒執行完成之後再結束,這個時候就要用到join 方法了。wait方法 呼叫obj的w...

1 1程序和多執行緒的概念及執行緒的優點

程序是作業系統結構的基礎,是一次程式的執行,是程式及其資料在處理機上的順序執行過程,是程式在資料集合上執行的過程,它是系統進行資源分配和排程的獨立單位。程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的...

多執行緒概念

概念 多執行緒 是指從軟體或者硬體上實現多個執行緒併發執行的技術,多執行緒包括軟體多執行緒和硬體多執行緒。軟體多執行緒 即便處理器只能執行乙個執行緒,作業系統也可以通過快速的在不同執行緒之間進行切換,由於時間間隔很小,來給使用者造成一種多個執行緒同時執行的假象。程序 是指計算機中已執行的程式.並行 ...