多執行緒學習筆記

2021-05-26 06:33:23 字數 1613 閱讀 1828

多執行緒的相關概念

什麼是程序?

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

而乙個程序又是由多個執行緒所組成的。

什麼是執行緒?

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

什麼是多執行緒?

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

多執行緒的好處:

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

多執行緒的不利方面:

執行緒也是程式,所以執行緒需要占用記憶體,執行緒越多占用記憶體也越多;

多執行緒需要協調和管理,所以需要cpu時間跟蹤執行緒;

執行緒之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;

執行緒太多會導致控制太複雜,最終可能造成很多bug;

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

thread類的靜態屬性currentthread獲取當前執行的執行緒.

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

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

我們通過其中提供的thread類來建立和控制線程,threadpool類用於管理執行緒池等。

(此外還提供解決了執行緒執行安排,死鎖,執行緒間通訊等實際問題的機制。)

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

start():啟動執行緒;

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

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

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

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

abort()方法帶來的後果是不可恢復的終止執行緒

thread.join()方法使主線程等待

所有執行緒都是依附於main()函式所在的執行緒的,main()函式是c#程式的入口,起始執行緒可以稱之為主線程。

如果所有的前台執行緒都停止了,那麼主線程可以終止,而所有的後台執行緒都將無條件終止。

所有的執行緒雖然在微觀上是序列執行的,但是在巨集觀上你完全可以認為它們在並行執行。

如何操縱乙個執行緒

thread.threadstate 屬性

多執行緒學習筆記 執行緒

thread類 常用屬性 currentthread 獲取當前正在執行的執行緒 isalive 指示當前執行緒的執行狀態 isbackground 指示是否為後台執行緒 isthreadpoolthread 指示是否屬於託管執行緒池 managedthreadid 獲取執行緒識別符號 name 獲取...

多執行緒學習筆記

多執行緒是實現多工的一種方式,多個程序多個執行緒。建立執行緒 1.繼承thread類 子類覆蓋父類中的run方法,將執行緒執行的 存放在run中。2.建立子類物件的同時執行緒也被建立。3.通過呼叫start方法開啟執行緒。執行緒的各種狀態 1.建立狀態 在程式中用構造方法建立了乙個執行緒物件後,新的...

多執行緒學習筆記

如通過 ctrl alt 的快捷鍵 啟動任務管理器 程序,就可以看到程序,基本上在執行中的exe程式都可以看成程序。下圖是單任務與多工執行的方式,從圖中可以看出 在單任務執行環境中,後面的任務必須在前面的任務執行完之後才能進行,也就是說單任務的特點是排隊執行,也就是同步。而在多工環境中,不同的任務可...