線程,託管線程池,前臺線程,後臺線程!!!

線程,託管線程池,前臺線程,後臺線程

一.線程

操做系統使用進程將他們正在執行的不一樣應用程序分開。線程是操做系統分配處理器時間的基本單元,而且進程中能夠有多個線程同時執行代碼。每一個線程都維護異常處理程序,調度優先級和一組系統用於在調度該線程前保存線程上下文的結構。線程上下文包括爲使線程在線程的宿主進程地址空間中無縫地繼續執行所需的全部信息,包括線程的CPU寄存器組合堆棧。數據庫

.Net Framework將操做系統進程進一步細分爲由System.AppDomain表示的,稱爲應用程序域的輕量託管子進程。一個或多個託管線程(由System.Threading.Thread表示)能夠在同一個託管進程中的一個或任意數目的應用程序域中運行。雖然每一個應用程序域都是用單個線程啓動的,但該應用程序域中的代碼能夠建立附加應用程序域和附加線程。其結果是託管線程能夠在同一個非託管進程中的應用程序域之間自由移動;您可能只有一個線程在若干應用程序域之間移動。服務器

支持搶先多任務處理的操做系統能夠建立多個進程中的多個線程同時執行的效果。它經過如下方式實現這一點:在須要處理器時間的線程之間分割可用處理器時間,並輪流爲每一個線程分配處理器時間片。當前執行的線程在其時間片結束時被掛起,而另外一個線程繼續運行。當系統從一個線程切換到另外一個線程時,它將保存被搶先的線程的線程上下文,並從新加載線程隊列中下一個線程的已保存線程上下文。網絡

時間片的長度取決於操做系統和處理器。因爲每一個時間片都很小,所以即便只有一個處理器,多個線程看起來彷佛也是在同時執行。這實際上就是多處理器系統中發生的情形,在此類系統中,可執行線程分佈在多個可用處理器中。多線程

多線程優勢

單個應用程序域可使用多個線程完成如下任務異步

  1. 經過網絡和Web服務器和數據庫通訊
  2. 執行佔用大量時間的操做
  3. 區分具備不一樣優先級的任務。例如,高優先級線程管理時間關鍵的任務,低優先級線程執行其餘任務。
  4. 使用戶界面能夠在將時間分配給後臺任務時仍能快速作出響應。

多線程缺點

線程處理還具備在設計應用程序時要考慮的資源要求和潛在衝突。這些資源要求以下所述: 1. 系統將爲進程,AppDomain對象和線程所需的上下文信息使用內存。所以,能夠建立的進程,AppDomain對象和線程的數目可受到可用內存的限制。 2. 跟蹤大量的線程將佔用大量的處理器時間。若是線程過多,則其中大多數線程都不會產生明顯的進度。若是大多數當前線程處於一個進程中,則其餘進程中的線程的調度頻率就會很低。 3. 使用許多線程控制代碼執行很是複雜,並可能產生許多bug。 4. 銷燬線程須要瞭解可能發生的問題並對那些問題進行處理。 5.操作系統

二.託管線程池

1.託管線程池定義

定義: ThreadPool類爲你的應用程序提供一個受系統管理的輔助線程池,從而使你可以專一於應用程序任務,而非線程管理。若是有須要後臺處理的短任務,託管的線程池則爲利用多個線程的簡便方法。 用途:.Net FrameWork 將線程池用於多種用途,包括異步I/O完成,計時器回調,註冊的等待操做,使用委託的異步方法調用和System.Net套接字鏈接。線程

2.託管線程池特徵

線程池線程是後臺線程。每一個線程均使用默認的堆棧大小,以默認的優先級運行,而且位於多線程單元中。每一個進程只有一個線程池。設計

最大線程池線程數:可排入線程池的操做的數量僅受可用內存限制;從.Net Framework4 開始,進程線程池的默認大小取決於若干因素,例如虛擬地址空間的大小。能夠用GetMaxThreads和SetMaxThreads方法來控制最大線程數。對象

線程池最小值:線程池根據須要提供的工做線程或I/O完成線程.直到它達到每一個類別的指定最小值。可使用GetMinThreads方法獲取最小值.隊列

3.什麼時候不使用線程池線程?

如下幾種狀況適合建立並管理本身的線程,而非使用線程池線程:

  1. 須要一個前臺線程
  2. 須要具備特定優先級的線程
  3. 擁有會致使線程長時間阻塞的任務。線程池具備最大線程數,所以大量被阻塞的線程池線程可能會組織任務啓動。
  4. 需將線程放入單線程單元。全部ThreadPool線程均位於多線程單元中.
  5. 需具備與線程關聯的穩定標識,或需將一個線程專用於一項任務.

4.線程池異常

線程池線程上未經處理的異常將終止該進程。如下三種是例外:

1.ThreadAbortException在線程池線程中引起,由於調用了Abort. 2.AppDomainUnloadedException在線程池線程中引起,由於正在卸載應用程序域。 3.公共語言運行時或主機進程將終止該線程.

三.前臺線程,後臺線程

1.特徵

託管線程有多是後臺線程,也有多是前臺線程。後臺線程不會使託管執行環境處於運行狀態,除此以外,後臺線程和前臺線程是同樣的。一旦全部前臺線程在託管進程(其中.exe文件是託管程序集)中被中止,系統將中止全部後臺線程並關閉。線程的前臺和後臺狀態不影響線程中未經處理的異常的結果。

2.哪些是前臺線程,哪些是後臺線程?

屬於託管線程池的線程(即其IsThreadPoolThread屬性爲true的線程)是後臺線程.從非託管代碼進入托管執行環境的全部線程都被標記爲後臺線程.經過建立並啓動新的Thread對象而生成的全部線程都默認爲前臺線程.

相關文章
相關標籤/搜索