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