一.線(xiàn)程
操作系統(tǒng)使用進(jìn)程將他們正在執(zhí)行的不同應(yīng)用程序分開(kāi)。線(xiàn)程是操作系統(tǒng)分配處理器時(shí)間的基本單元,并且進(jìn)程中可以有多個(gè)線(xiàn)程同時(shí)執(zhí)行代碼。每個(gè)線(xiàn)程都維護(hù)異常處理程序,調(diào)度優(yōu)先級(jí)和一組系統(tǒng)用于在調(diào)度該線(xiàn)程前保存線(xiàn)程上下文的結(jié)構(gòu)。線(xiàn)程上下文包括為使線(xiàn)程在線(xiàn)程的宿主進(jìn)程地址空間中無(wú)縫地繼續(xù)執(zhí)行所需的所有信息,包括線(xiàn)程的CPU寄存器組合堆棧。
.Net Framework將操作系統(tǒng)進(jìn)程進(jìn)一步細(xì)分為由System.AppDomain表示的,稱(chēng)為應(yīng)用程序域的輕量托管子進(jìn)程。一個(gè)或多個(gè)托管線(xiàn)程(由System.Threading.Thread表示)可以在同一個(gè)托管進(jìn)程中的一個(gè)或任意數(shù)目的應(yīng)用程序域中運(yùn)行。雖然每個(gè)應(yīng)用程序域都是用單個(gè)線(xiàn)程啟動(dòng)的,但該應(yīng)用程序域中的代碼可以創(chuàng)建附加應(yīng)用程序域和附加線(xiàn)程。其結(jié)果是托管線(xiàn)程可以在同一個(gè)非托管進(jìn)程中的應(yīng)用程序域之間自由移動(dòng);您可能只有一個(gè)線(xiàn)程在若干應(yīng)用程序域之間移動(dòng)。
支持搶先多任務(wù)處理的操作系統(tǒng)可以創(chuàng)建多個(gè)進(jìn)程中的多個(gè)線(xiàn)程同時(shí)執(zhí)行的效果。它通過(guò)以下方式實(shí)現(xiàn)這一點(diǎn):在需要處理器時(shí)間的線(xiàn)程之間分割可用處理器時(shí)間,并輪流為每個(gè)線(xiàn)程分配處理器時(shí)間片。當(dāng)前執(zhí)行的線(xiàn)程在其時(shí)間片結(jié)束時(shí)被掛起,而另一個(gè)線(xiàn)程繼續(xù)運(yùn)行。當(dāng)系統(tǒng)從一個(gè)線(xiàn)程切換到另一個(gè)線(xiàn)程時(shí),它將保存被搶先的線(xiàn)程的線(xiàn)程上下文,并重新加載線(xiàn)程隊(duì)列中下一個(gè)線(xiàn)程的已保存線(xiàn)程上下文。
時(shí)間片的長(zhǎng)度取決于操作系統(tǒng)和處理器。由于每個(gè)時(shí)間片都很小,因此即使只有一個(gè)處理器,多個(gè)線(xiàn)程看起來(lái)似乎也是在同時(shí)執(zhí)行。這實(shí)際上就是多處理器系統(tǒng)中發(fā)生的情形,在此類(lèi)系統(tǒng)中,可執(zhí)行線(xiàn)程分布在多個(gè)可用處理器中。
多線(xiàn)程優(yōu)點(diǎn)
單個(gè)應(yīng)用程序域可以使用多個(gè)線(xiàn)程完成以下任務(wù)
通過(guò)網(wǎng)絡(luò)和Web服務(wù)器和數(shù)據(jù)庫(kù)通信
執(zhí)行占用大量時(shí)間的操作
區(qū)分具有不同優(yōu)先級(jí)的任務(wù)。例如,高優(yōu)先級(jí)線(xiàn)程管理時(shí)間關(guān)鍵的任務(wù),低優(yōu)先級(jí)線(xiàn)程執(zhí)行其他任務(wù)。
使用戶(hù)界面可以在將時(shí)間分配給后臺(tái)任務(wù)時(shí)仍能快速做出響應(yīng)。
多線(xiàn)程缺點(diǎn)
線(xiàn)程處理還具有在設(shè)計(jì)應(yīng)用程序時(shí)要考慮的資源要求和潛在沖突。這些資源要求如下所述: 1. 系統(tǒng)將為進(jìn)程,AppDomain對(duì)象和線(xiàn)程所需的上下文信息使用內(nèi)存。因此,可以創(chuàng)建的進(jìn)程,AppDomain對(duì)象和線(xiàn)程的數(shù)目可受到可用內(nèi)存的限制。 2. 跟蹤大量的線(xiàn)程將占用大量的處理器時(shí)間。如果線(xiàn)程過(guò)多,則其中大多數(shù)線(xiàn)程都不會(huì)產(chǎn)生明顯的進(jìn)度。如果大多數(shù)當(dāng)前線(xiàn)程處于一個(gè)進(jìn)程中,則其他進(jìn)程中的線(xiàn)程的調(diào)度頻率就會(huì)很低。 3. 使用許多線(xiàn)程控制代碼執(zhí)行非常復(fù)雜,并可能產(chǎn)生許多bug。 4. 銷(xiāo)毀線(xiàn)程需要了解可能發(fā)生的問(wèn)題并對(duì)那些問(wèn)題進(jìn)行處理。 5.
二.托管線(xiàn)程池
1.托管線(xiàn)程池定義
定義: ThreadPool類(lèi)為你的應(yīng)用程序提供一個(gè)受系統(tǒng)管理的輔助線(xiàn)程池,從而使你能夠?qū)W⒂趹?yīng)用程序任務(wù),而非線(xiàn)程管理。如果有需要后臺(tái)處理的短任務(wù),托管的線(xiàn)程池則為利用多個(gè)線(xiàn)程的簡(jiǎn)便方法。 用途:.Net FrameWork 將線(xiàn)程池用于多種用途,包括異步I/O完成,計(jì)時(shí)器回調(diào),注冊(cè)的等待操作,使用委托的異步方法調(diào)用和System.Net套接字連接。
2.托管線(xiàn)程池特征
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線(xiàn)安全]玩轉(zhuǎn)無(wú)線(xiàn)電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26
