程序和執行緒

2021-08-17 21:55:20 字數 978 閱讀 3308

1、程序和執行緒的由來

(1)程序的由來

假如有兩個任務a和b,任務a在執行到一半的過程中,需要讀取大量的資料輸入(i/o操作),而此時cpu只能靜靜的等待任務a讀取完資料才能繼續執行,這樣就白白浪費了cpu資源。於是人們想,能否在任務a讀取資料的過程中,讓任務b去執行,當任務a讀取完資料之後,讓任務b暫停,然後讓任務a繼續執行。

但是這樣就有乙個問題,原來每次都是乙個程式在計算機裡面執行,也就是說記憶體中始終只有乙個程式的執行資料。而如果想要任務a執行i/o操作的時候,讓任務b去執行,必然記憶體中要裝入多個程式,這個時候,人們就發明了程序,用程序來對應乙個程式,每個程序對應一定的記憶體空間,並且只能使用它們自己的記憶體空間,各個程序間互不干擾。並且,程序儲存了程式每個時刻的執行狀態,這樣就為程序切換提供了可能。當程序暫停時,它會儲存程序當前的狀態,在下一次重新切換回來時,便根據之前儲存的狀態進行恢復,然後繼續執行。

執行緒是程序的子任務,保證程式的實時性;

程序是作業系統資源的分配單位,執行緒是cpu排程的基本單位;

程序讓作業系統的併發性成為可能,而執行緒讓程序的內部併發成為可能。

2、程序和執行緒的區別

執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器),乙個執行緒可以與同屬乙個程序的其他執行緒共享程序的資源。

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

乙個車間裡,可以有很多任務人,他們協同完成乙個任務。執行緒就好比車間裡的工人,乙個程序可以包含多個執行緒。

程序的記憶體空間是共享的,每個執行緒都可以使用這些共享記憶體。

對於某些共享記憶體,當乙個執行緒使用該記憶體時,其他執行緒必須等它結束,才能使用這一塊記憶體,防止他人進入的簡單方法是加鎖。先到的人鎖上門,等鎖開啟再進去。

對於某些共享記憶體,可以同時使n個執行緒使用該記憶體,例如工廠的某些房間只能容納n個人,這樣就在房間門口掛n把鑰匙,進去的人取一把鑰匙,出來時再把鑰匙掛回原處。這種做法叫「訊號量」(semaphore)。

執行緒和程序

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

程序和執行緒

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

執行緒和程序

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