C 執行緒(二) 關於執行緒的相關概念

2022-03-28 09:37:42 字數 1523 閱讀 4140

from

當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。 而乙個程序又是由多個執行緒所組成的。

執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器(棧指標、程式計數器等),但**區是共享的,即不同的執行緒可以執行同樣的函式。

多執行緒是指程式中包含多個執行流,即在乙個程式中可以同時執行多個不同的執行緒來執行不同的任務,也就是說允許單個程式建立多個並行執行的執行緒來完成各自的任務。

可以提高cpu的利用率。在多執行緒程式中,乙個執行緒必須等待的時候,cpu可以執行其它的執行緒而不是等待,這樣就大大提高了程式的效率。

執行緒也是程式,所以執行緒需要占用記憶體,執行緒越多占用記憶體也越多; 多執行緒需要協調和管理,所以需要cpu時間跟蹤執行緒; 執行緒之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題; 執行緒太多會導致控制太複雜,最終可能造成很多bug;

接下來將對c#程式設計中的多執行緒機制進行**。為了省去建立gui那些繁瑣的步驟,更清晰地逼近執行緒的本質,接下來的所有程式都是控制台程式,程式最後的console.readline()是為了使程式中途停下來,以便看清楚執行過程中的輸出。

乙個直觀印象的執行緒示例:

using

system;

using

system.threading;

namespace

threadtest

}}

輸出如下:

system thread's status:running

在這裡,我們通過thread類的靜態屬性currentthread獲取了當前執行的執行緒,對其name屬性賦值「system thread」,最後還輸出了它的當前狀態(threadstate)。

所謂靜態屬性,就是這個類所有物件所公有的屬性,不管你建立了多少個這個類的例項,但是類的靜態屬性在記憶體中只有乙個。很容易理解currentthread為什麼是靜態的——雖然有多個執行緒同時存在,但是在某乙個時刻,cpu只能執行其中乙個。

在程式的頭部,我們使用了如下命名空間:

using system;

using system.threading;

在.net framework class library中,所有與多執行緒機制應用相關的類都是放在system.threading命名空間中的。如果你想在你的應用程式中使用多執行緒,就必須包含這個類。

我們通過其中提供的thread類來建立和控制線程,threadpool類用於管理執行緒池等。 (此外還提供解決了執行緒執行安排,死鎖,執行緒間通訊等實際問題的機制。)

thread類有幾個至關重要的方法,描述如下:

start():啟動執行緒;

sleep(int):靜態方法,暫停當前執行緒指定的毫秒數;

abort():通常使用該方法來終止乙個執行緒;

suspend():該方法並不終止未完成的執行緒,它僅僅掛起執行緒,以後還可恢復;

resume():恢復被suspend()方法掛起的執行緒的執行。

----------------->>>

執行緒相關概念

程序 程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是作業系統進行資源分配與排程的基本單位.可以把程序簡單的理解為正在作業系統中執行的乙個程式.執行緒執行緒 thread 是程序的乙個執行單元.乙個執行緒就是程序中乙個單一順序的控制流,程序的乙個執行分支程序是執行緒的容器,乙...

執行緒的相關概念

1.程序與執行緒的區別 程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述,不過是顆粒大小不同。執行緒就是乙個小的程序,當拿到了cpu的資源,就變成了程序 執行緒是程式設計師可以控制,程序是不可控制的 執行緒開銷比程序小的多 單程序單執行緒 乙個人在桌子上吃飯 單程序多執行緒 多個人在桌子上...

C 多執行緒 一 多執行緒的相關概念

什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...