一.線程

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

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

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

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

多線程優(yōu)點(diǎn)

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

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

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

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

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

多線程缺點(diǎn)

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

二.托管線程池

1.托管線程池定義

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

2.托管線程池特征

網(wǎng)友評(píng)論