一.線程

操作系統(tǒng)使用進程將他們正在執(zhí)行的不同應(yīng)用程序分開。線程是操作系統(tǒng)分配處理器時間的基本單元,并且進程中可以有多個線程同時執(zhí)行代碼。每個線程都維護異常處理程序,調(diào)度優(yōu)先級和一組系統(tǒng)用于在調(diào)度該線程前保存線程上下文的結(jié)構(gòu)。線程上下文包括為使線程在線程的宿主進程地址空間中無縫地繼續(xù)執(zhí)行所需的所有信息,包括線程的CPU寄存器組合堆棧。

.Net Framework將操作系統(tǒng)進程進一步細分為由System.AppDomain表示的,稱為應(yīng)用程序域的輕量托管子進程。一個或多個托管線程(由System.Threading.Thread表示)可以在同一個托管進程中的一個或任意數(shù)目的應(yīng)用程序域中運行。雖然每個應(yīng)用程序域都是用單個線程啟動的,但該應(yīng)用程序域中的代碼可以創(chuàng)建附加應(yīng)用程序域和附加線程。其結(jié)果是托管線程可以在同一個非托管進程中的應(yīng)用程序域之間自由移動;您可能只有一個線程在若干應(yīng)用程序域之間移動。

支持搶先多任務(wù)處理的操作系統(tǒng)可以創(chuàng)建多個進程中的多個線程同時執(zhí)行的效果。它通過以下方式實現(xiàn)這一點:在需要處理器時間的線程之間分割可用處理器時間,并輪流為每個線程分配處理器時間片。當(dāng)前執(zhí)行的線程在其時間片結(jié)束時被掛起,而另一個線程繼續(xù)運行。當(dāng)系統(tǒng)從一個線程切換到另一個線程時,它將保存被搶先的線程的線程上下文,并重新加載線程隊列中下一個線程的已保存線程上下文。

時間片的長度取決于操作系統(tǒng)和處理器。由于每個時間片都很小,因此即使只有一個處理器,多個線程看起來似乎也是在同時執(zhí)行。這實際上就是多處理器系統(tǒng)中發(fā)生的情形,在此類系統(tǒng)中,可執(zhí)行線程分布在多個可用處理器中。

多線程優(yōu)點

單個應(yīng)用程序域可以使用多個線程完成以下任務(wù)

  1. 通過網(wǎng)絡(luò)和Web服務(wù)器和數(shù)據(jù)庫通信

  2. 執(zhí)行占用大量時間的操作

  3. 區(qū)分具有不同優(yōu)先級的任務(wù)。例如,高優(yōu)先級線程管理時間關(guān)鍵的任務(wù),低優(yōu)先級線程執(zhí)行其他任務(wù)。

  4. 使用戶界面可以在將時間分配給后臺任務(wù)時仍能快速做出響應(yīng)。

多線程缺點

線程處理還具有在設(shè)計應(yīng)用程序時要考慮的資源要求和潛在沖突。這些資源要求如下所述: 1. 系統(tǒng)將為進程,AppDomain對象和線程所需的上下文信息使用內(nèi)存。因此,可以創(chuàng)建的進程,AppDomain對象和線程的數(shù)目可受到可用內(nèi)存的限制。 2. 跟蹤大量的線程將占用大量的處理器時間。如果線程過多,則其中大多數(shù)線程都不會產(chǎn)生明顯的進度。如果大多數(shù)當(dāng)前線程處于一個進程中,則其他進程中的線程的調(diào)度頻率就會很低。 3. 使用許多線程控制代碼執(zhí)行非常復(fù)雜,并可能產(chǎn)生許多bug。 4. 銷毀線程需要了解可能發(fā)生的問題并對那些問題進行處理。 5.

二.托管線程池

1.托管線程池定義

定義: ThreadPool類為你的應(yīng)用程序提供一個受系統(tǒng)管理的輔助線程池,從而使你能夠?qū)W⒂趹?yīng)用程序任務(wù),而非線程管理。如果有需要后臺處理的短任務(wù),托管的線程池則為利用多個線程的簡便方法。 用途:.Net FrameWork 將線程池用于多種用途,包括異步I/O完成,計時器回調(diào),注冊的等待操作,使用委托的異步方法調(diào)用和System.Net套接字連接。

2.托管線程池特征

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式