Linux的程序和執行緒關係

2022-09-07 19:33:10 字數 821 閱讀 4979

一、理解linux的程序,執行緒,pid,lwp,tid,tgid

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

程序是資源的集合,這些資源包括記憶體位址空間,檔案描述符等等,乙個程序中的多個執行緒共享這些資源。

cpu對任務進行排程時,可排程的基本單位 (dispatchable entity)是執行緒。如果乙個程序中沒有其他執行緒,可以理解成這個程序中只有乙個主線程,這個主程序獨享程序中的所有資源。

程序的個體間是完全獨立的,而執行緒間是彼此依存,並且共享資源。多程序環境中,任何乙個程序的終止,不會影響到其他非子程序。而多執行緒環境中,父執行緒終止,全部子執行緒被迫終止(沒有了資源)。

上述第一點說明是最基礎的,也是最重要的。

二、檢視程序、執行緒的方法

在 linux c/c++ 中通常是通過 pthread 庫進行執行緒級別的操作。

在 pthread 庫中有函式:

pthread_t pthread_self(void);

1它返回乙個 pthread_t 型別的變數,指代的是呼叫 pthread_self 函式的執行緒的 「id」。

怎麼理解這個「id」呢?

這個「id」是 pthread 庫給每個執行緒定義的程序內唯一標識,是 pthread 庫維持的。

由於每個程序有自己獨立的記憶體空間,故此「id」的作用域是程序級而非系統級(核心不認識)。

其實 pthread 庫也是通過核心提供的系統呼叫(例如clone)來建立執行緒的,而核心會為每個執行緒建立系統全域性唯一的「id」來唯一標識這個執行緒。

這個系統全域性唯一的「id」叫做執行緒pid(程序id),或叫做tid(執行緒id),也有叫做lwp(輕量級程序=執行緒)的。

linux執行緒和程序的關係

linux的執行緒與程序,和傳統的執行緒與程序不太一樣。傳統的windows系統下,在核心中都有專門支援執行緒的機制,所以把執行緒叫做輕量級程序。從linux核心角度來看,執行緒和程序的本質上並無太大區別,因為他們共用了一套結構體,和排程演算法。對比一下執行緒和程序的建立就可以知道 執行緒建立 cl...

程序和執行緒的關係

程序是系統資源管理的最小單位,執行緒是程式執行的最小單位。執行緒和程序十分相似,不同的只是執行緒比程序小。首先,執行緒採用了多個執行緒可共享資源的設計思想。例如,它們的操作大部分都是在同一位址空間進行的。其次,從乙個執行緒切換到另一線程所花費的代價比程序低。再次,程序本身的資訊在記憶體中占用的空間比...

js 執行緒和程序的關係

程序 process 和執行緒 thread 是作業系統的基本概念 1.計算機的核心是cpu,它承擔了所有的計算任務 2.單個cpu一次只能執行乙個任務 3.程序它代表cpu所能處理的單個任務。任一時刻,cpu總是執行乙個程序,其他程序處於非執行狀態 4.乙個程序可以包括多個執行緒。5.乙個程序的記...