C# 线程手册 第五章 扩展多线程应用程序 系列
[第1篇] 什么是線程池
? 到目前為止我們使用多線程應用程序的目的是盡可能多地使用計算機處理器資源。所以,看起來我們僅需要為每個獨立的任務分配一個不同的線程,并讓處理器確定在任何時間它總會處理其中的某一個任務。額,對小系統來說這樣做很好。但是當系統越來越復雜時,線程的數量也會越來越多,操作系統將會花費更多時間處理鎖分配,理清線程之間的關系,處理程序指令的時間實際上是很少的。為了讓我們的程序具備可擴展性,我們將不得不對線程進行一些控制。
[第2篇] CLR 和 線程
? 設計CLR 的目的是創建一個提供多種服務(比如編譯、垃圾回收、內存管理以及基于.NET 平臺的線程池技術)的托管代碼環境。
? 當然,Win32 平臺和.NET Framework 平臺在定義我們的應用程序使用的用來作為線程宿主的進程方面是不同的。在傳統Win32 應用程序中,每個進程都由一個線程集合組成。如果一臺機器僅有一個CPU,那么每個線程都要與其他線程交換線程本地存儲和調用堆棧以實現時間輪轉。單一處理器基于線程優先級來為每個線程分配時間片。當一個特定線程的時間片用完以后,它會被暫停執行同時其他線程被允許執行它的任務。在.NET Framework 中,每個Win32 進程都被邏輯上劃分為同時寄宿線程、TLS以及調用堆棧的應用程序域。值得一提的是應用程序域間的通信由.NET Framework 中一個稱為Remoting 的技術處理。
? 到目前為止,我們已經有了關于線程池和.NET 進程的基本概念,讓我們進一步看看CLR 是如何為.NET 應用程序提供線程池功能的。
[第3篇] 剖析ThreadPool 類
在這部分,我們將查看ThreadPool 類的多個方面并學習如何在我們的.NET 應用程序中使用ThreadPool 類的內容創建線程池。ThreadPool 類提供的線程可以用來做以下事情:
? 1. 處理工作組件
? 2. 處理異步I/O 調用
? 3. 處理定時器
? 4. 等待其他線程
[第4篇] 在C#中使用線程池
? 本章的之前部分內容主要介紹如何在.NET Framework 中使用線程池的概念。現在我們要介紹如何使用C# 實現創建并使用線程池的.NET 應用程序。如之前描述的那樣,System.Threading 命名空間中包含的ThreadPool 類可以被用于在.NET 應用程序中創建一個線程池。
? 在我們真正編碼之前,我們必須對ThreadPool 類中的兩個重要規則非常清楚。分別是:
? 1. 每個應用程序域中只能有一個ThreadPool 對象
? 2. 我們第一次調用ThreadPool.QueueUserWorkItem() 方法時會創建一個ThreadPool 對象,通過一個定時器或者注冊的等待操作調用的回調方法(內部使用應用程序域的線程池)也可以創建一個ThreadPool 對象。
[第5篇] 一個多線程微軟消息隊列(MSMQ)監聽器
? 在這部分,我們將使用ThreadPool 和MSMQ 進行消息收發。MSMQ 是一個分布式隊列,通過MSMQ 一個應用程序可以異步地與另外一個應用程序通信。
[第6篇] .NET 中的擴展性
? 如果你有一個多處理器系統,那么你將有機會體驗到線程真正的價值。Windows 操作系統負責向處理器分配線程,正如你在本書中看到的那樣,啟動一個進程會自動運行一個線程。.NET Framework 不提供細粒度的處理器分配控制,而是允許操作系統控制調度,這是由于操作系統比CLR 更加了解處理器的負載。CLR 負責提供一些諸如整個進程運行在哪個處理器上的控制。然而,一個進程中的所有線程都會運行在一個處理器上,控制進程中的線程運行在哪個處理器上的內容不會在本書中介紹。
總結
以上是生活随笔為你收集整理的C# 线程手册 第五章 扩展多线程应用程序 系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JAVA资料免费下载】158个JAVA
- 下一篇: vim基本命令