多執行緒同步與執行緒池

2021-09-22 10:33:22 字數 2214 閱讀 6354

前台執行緒和後台執行緒

c#中的執行緒分為前台執行緒和後台執行緒,執行緒建立時不做設定預設是前台執行緒。即執行緒屬性isbackground=false。

thread.isbackground = false;//false:設定為前台執行緒,系統預設為前台執行緒。
區別以及如何使用:這兩者的區別就是:應用程式必須執行完所有的前台執行緒才可以退出;而對於後台執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後台執行緒在應用程式退出時都會自動結束。一般後台執行緒用於處理時間較短的任務,如在乙個web伺服器中可以利用後台執行緒來處理客戶端發過來的請求資訊。而前台執行緒一般用於處理需要長時間等待的任務,如在web伺服器中的監聽客戶端請求的程式。

執行緒是寄託在程序上的,程序都結束了,執行緒也就不復存在了!

只要有乙個前台執行緒未退出,程序就不會終止!即說的就是程式不會關閉!(即在資源管理器中可以看到程序未結束。)

首先使用new thread()建立出新的執行緒,然後呼叫start方法使得執行緒進入就緒狀態,得到系統資源後就執行,在執行過程中可能有等待、休眠、死亡和阻塞四種狀態。正常執行結束時間片後返回到就緒狀態。如果呼叫suspend方法會進入等待狀態,呼叫sleep或者遇到程序同步使用的鎖機制而休眠等待。具體過程如下圖所示:

join方法主要是用來阻塞呼叫執行緒,直到某個執行緒終止或經過了指定時間為止。官方的解釋比較乏味,通俗的說就是建立乙個子執行緒,給它加了這個方法,其它新建的執行緒就會暫停開始執行,直到這個執行緒執行完為止才會開始執行(包括主線程)。她的方法宣告如下:

public void join();

public bool join(int millisecondstimeout); //毫秒數

public bool join(timespan timeout);       //時間段

使用mutex類實現執行緒同步

mutex的突出特點是可以跨應用程式域邊界對資源進行獨佔訪問,即可以用於同步不同程序中的執行緒,這種功能當然這是以犧牲更多的系統資源為代價的。

主要常用的兩個方法:

public virtual bool waitone()   阻止當前執行緒,直到當前 system.threading.waithandle 收到訊號獲取互斥鎖。

public void releasemutex()     釋放 system.threading.mutex 一次。

使用例項:

static void main(string args)

for (int i = 0; i < 3; i++)

console.readkey();

} public static void threadmethod1(object val)

mutet.releasemutex(); //釋放鎖

}

2、執行緒池上面介紹了介紹了平時用到的大多數的多執行緒的例子,但在實際開發中使用的執行緒往往是大量的和更為複雜的,這時,每次都建立執行緒、啟動執行緒。從效能上來講,這樣做並不理想(因為每使用乙個執行緒就要建立乙個,需要占用系統開銷);從操作上來講,每次都要啟動,比較麻煩。為此引入的執行緒池的概念。好處:1.減少在建立和銷毀執行緒上所花的時間以及系統資源的開銷 

2.如不使用執行緒池,有可能造成系統建立大量執行緒而導致消耗完系統記憶體以及」過度切換」。

在什麼情況下使用執行緒池?

1.單個任務處理的時間比較短 

2.需要處理的任務的數量大 

執行緒池最多管理執行緒數量=「處理器數 * 250」。也就是說,如果您的機器為2個2核cpu,那麼clr執行緒池的容量預設上限便是1000

通過執行緒池建立的執行緒預設為後台執行緒,優先順序預設為normal。

**示例:

static void main(string args)

public static void threadmethod1(object val)} }

多執行緒 執行緒池

第一 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。第二 提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。第三 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配 調優和監控...

多執行緒 執行緒池

執行緒池是什麼 執行緒池 thread pool 是一種基於池化思想管理執行緒的工具,經常出現在多執行緒伺服器中,如mysql。執行緒過多會帶來額外的開銷,其中包括建立銷毀執行緒的開銷 排程執行緒的開銷等等,同時也降低了計算機的整體效能。執行緒池維護多個執行緒,等待監督管理者分配可併發執行的任務。這...

多執行緒 執行緒池

執行緒池的作用 減少了每次建立 銷毀執行緒所帶來的損耗。執行緒池建立執行緒的簡易流程 文字描述 1 先判斷核心執行緒池 corepoolsize 是否已滿,沒滿就建立核心執行緒執行,滿了就進行下一判斷。2 判斷等待佇列 workqueue 是否已經滿了,沒滿就新增到等待佇列,滿了就進行下一判斷。3 ...