執行緒概述
從此圖中我們會發現 .NET 與C# 的每個版本發布都是有一個“主題”。即:C#1.0託管代碼→C#2.0泛型→C#3.0LINQ→C#4.0動態語言→C#5.0異步編程。
多核心CPU超執行緒CPU
1. 多核心處理器(CPU)指在一塊處理器(CPU)中含有多個處理單元,每一個處理單元它就相當於一個單核處理器(CPU)。因此,多核處理器的功能就相當於多台單核處理器電腦在線上作戰。
2.超執行緒處理器(CPU)指在一塊CPU中,用虛擬的方法將一個物理核心模擬成多個核心(一般情況是一個單物理核心,模擬成二個核心,也即所謂的二執行緒。只有當執行緒數比物理核心數多才能叫超執行緒。如四核四執行緒並不是超執行緒,而四核八執行緒才能叫超執行緒)。
3.優缺點:
1)多核心是真正的物理核心,一塊多核心的處理器(CPU),就相當於多塊單核心的處理器(CPU)相互協作。因此,從理論上說,多核心比超執行緒具有更高運算能力。雖然多核心比超執行緒的運算速度快很多,但多核心也有一個明顯的缺點,那就是多核心的使用效率比超執行緒處理器(CPU)低。因為,多核心在處理數據時,它們相互“合作”的並不是很完美,常常某個核心需要等待其他核心的計算數據,從而耽誤時間,被迫怠工。另外,由於目前多核心都是採用共享三級快取,這更使多核心的CPU運算速度減慢不少。
2)超執行緒是用虛擬的方法將一個物理核心虛擬成多個核心,它能夠最大限度地利用現有的核心資源,具有較高性價比。
作業系統對多核處理器的最佳化
主要體現在調度和中斷上:
1.對任務的分配進行最佳化。使同一應用程式的任務儘量在同一個核上執行。
2.對任務的共享數據最佳化。由於多核處理器(Chip Multi-Processor,CMP)體系結構共享二級快取(目前),可以考慮改變任務在記憶體中的數據分布,使任務在執行時儘量增加二級快取的命中率。
3.對任務的負載均衡最佳化。當任務在調度時,出現了負載不均衡,考慮將較忙處理器中與其他任務最不相關的任務遷移,以達到數據的衝突最小。
進程和執行緒
1. 進程 進程是應用程式的執行實例,每個進程是由私有的虛擬地址空間、代碼、數據和其它各種系統資源組成,進程在運行過程中創建的資源隨著進程的終止而被銷毀,所使用的系統資源在進程終止時被釋放或關閉。
2. 執行緒 執行緒是進程內部的一個執行單元。系統創建好進程後,實際上就啟動執行了該進程的主執行執行緒。主執行執行緒終止了,進程也就隨之終止。
每個執行緒都維護異常處理程式、調度優先權和執行緒上下文。(執行緒上下文,當前執行的執行緒在其時間片結束時被掛起,而另一個執行緒繼續運行。當系統從一個執行緒切換到另一個執行緒時,它將保存被搶先的執行緒的執行緒上下文,並重新載入執行緒佇列中下一個執行緒的已保存執行緒上下文)
3. 關係 作業系統使用進程將它們正在執行的不同應用程式分開,.NET Framework 將作業系統進程進一步細分為System.AppDomain (應用程式域)的輕量託管子進程。
執行緒是CPU的調度單元,是進程中的執行單位,一個進程中可以有多個執行緒同時執行代碼。
使用
當一個異步過程調用發出後,調用者不能立刻得到結果。基於事件機制,實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。比如,你現在要有一批數據要大數據要入庫,你又不想一邊入庫一邊等待返回結果,你可以用異步,將大數據推入一個佇列,然後另外一個執行緒來操作這個佇列裡面的數據入庫,入完了,就通知一下主執行緒。這段時間你的主執行緒可以做任何事。