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