Linux程序與執行緒

2022-08-05 14:30:22 字數 917 閱讀 1656

每個程序都有乙個位址空間和乙個控制線程。如果乙個程序中有多個控制線程,那麼就是多執行緒的情況。程序是資源分配的最小單位,執行緒是cpu排程的最小單位。

程序與執行緒的區別(或者說在已經有程序的情況下,為什麼還需要執行緒):

1.多執行緒可以表達為在相同位址空間下的程式並行執行,多程序可以表達為在不同位址空間下的程式並行執行。

2.執行緒比程序要更加輕量級,執行緒的建立、銷毀、切換都快於程序。執行緒用於做正事的時間多,cpu利用率高。具體在上下文切換方面,執行緒的排程需要切換上下文,程序的排程在切換上下文之前,需要切換到新的位址空間(對於linux,執行緒和程序的最大區別就在於位址空間)。

3.執行緒之間的資料共享較簡單,程序之間的資料共享較複雜。

每個執行緒所私有的東西:程式計數器、堆疊、暫存器(結合「執行緒是cpu排程的最小單位」就很好理解了,切換執行緒時,以上三樣都需要儲存起來以便下次恢復現場)。同個程序下執行緒之間共享的東西:位址空間、全域性變數、開啟檔案。

每個程序都有乙個程序id,用非負整數pid_t來表示。比如程序0代表排程程序,程序1代表init程序。

pid_t fork(void);

我們可以使用fork()函式建立乙個新的程序,fork()函式比較特殊,一次呼叫兩次返回。在父程序中,它會返回子程序id(非負整數);在子程序中,它會返回0。我們可以通過fork()的返回值來判斷當前環境在父程序還是子程序。

在fork()之後,子程序獲得父程序資料空間和堆疊的拷貝,他們只是值一樣,儲存空間並不共享。在父程序中開啟的檔案描述符,在子程序中也是開啟的,而且父子程序操作的是同乙個檔案。所以fork()函式之後,檔案是共享的,資料是拷貝的

乙個程序內的所有資訊對同乙個程序內的執行緒都是共享的,包括可執行**的程式、程式的全域性記憶體、堆記憶體、棧以及檔案描述符。

管道、fifo、訊息佇列、訊號量、共享儲存

Linux 程序與執行緒

程序就是在作業系統中執行的程式,是作業系統資源管理的最小單位。乙個程序可以管理多個執行緒,執行緒相對輕量,可以共享程序位址空間 乙個進行在執行的過程中,不可能一直佔據著cpu進行邏輯運算,中間很可能在進行磁碟i o或者網路i o,為了充分利用cpu運算資源,有人設計了執行緒的概念。執行緒最大的特點就...

Linux之路 程序與執行緒(實驗)

實驗1.建立倆個程序,讓子程序讀取乙個檔案,父程序等待子程序讀完檔案後繼續執行 include include include include int main else printf 開啟檔案成敗 exit 3 else return 0 實驗2,執行緒共享程序中的資料,在程序中直接引用並輸出該資...

Linux程序與執行緒之五

每日一結 一 共享記憶體 核心空間預留出來的一塊記憶體,用於程序間通訊 1 int shmget key t key,size t size,int shm 功能 獲取共享記憶體段的id 引數 key ipc private 或 ftok size 申請的共享記憶體段大小 4k的倍數 shm ipc...