程序和執行緒

2021-08-27 16:14:31 字數 890 閱讀 8784

程序(process)和執行緒(thread)是作業系統的基本概念。

程序和執行緒的模擬

計算機的核心是cpu,它承擔著所有的計算任務。他就像一座工廠,時刻在執行。

假設該工廠的電力有限,每次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間無法工作。背後的含義是,單個cpu一次只能執行乙個任務。

程序就好比工廠的車間,它代表cpu所能處理的單個任務。任意時刻,cpu總是執行乙個程序,其他程序處於非執行狀態。

乙個車間裡有很多任務人。他們協同作業完成同乙個任務。

執行緒好比車間裡的工人。乙個程序可以包括多個執行緒。

車間的空間是所有工人共享的,比如許多庫房是每個人都可以進出的。這象徵乙個程序的記憶體空間是共享的,每乙個執行緒都可以使用這些共享記憶體。

但是每個房間的大小不同,有些房間最大只能容納乙個人,比如洗手間、裡面有人的時候,其他人就不能進去了。這代表乙個執行緒使用某些共享記憶體時,其他執行緒必須等它結束之後才能使用這個記憶體。

防止他人進入的簡單方法,就是門口加一把鎖。先進去的人鎖上門,後到的人看到上鎖,就在門口排隊,等鎖開啟再進去。這就叫「互斥鎖」(mutual exclusion,縮寫mutex),防止多個執行緒同時讀寫某一塊記憶體區域。

還有些房間可以同時容納n個人,比如食堂。也就是說,如果人數大於n,多出來的人只能在外面等著。這好比某些記憶體區域,只能供給固定數目的執行緒使用。

此時的解決方法就是在門口掛n把鑰匙,進乙個人就取一把鑰匙,出來時再把鑰匙掛回原處。後來的人發現鑰匙架空了,就只能在門口排隊等著了。這種做法叫做「訊號量」(semaphore),用來保證多個執行緒不會互相衝突。mutex是semaphore中的一種特殊情況(n=1)時。完全可以用後者代替。但是因為mutex較為簡單,且效率更高。所以必須保證資源獨佔的情況下,還是採用這種設計。

執行緒和程序

標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...

程序和執行緒

乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...

執行緒和程序

對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...