1. 程式人生 > >async和await、Task和執行緒池執行緒的關係

async和await、Task和執行緒池執行緒的關係

計算機進入多核時代,開發人員想要充分利用計算機核心,需要編寫多執行緒程式。執行緒屬於程序,理想狀態下,在4核的計算機上最好有4個執行緒。

早期的執行緒建立是利用 Thread類,執行緒的建立需要花費很多時間,基於此,微軟公司為開發人員建立了執行緒池,執行緒池具有智慧爬山演算法,可以

根據執行緒的使用情況,動態調整執行緒的增加或者減少,當執行緒使用完成後,執行緒不會銷燬,而是回到執行緒池中,當新的程式碼需要執行緒執行的時候,

就可以利用這個已經建立好的執行緒,當一個執行緒一段時間不使用,它便會終結自己。畢竟,執行緒也需要佔用空間。

 

執行緒的問題在於無法知道程式碼是否執行完成,為此,微軟公司建立了Task,這個任務可以查詢到狀態,已完成,出錯或者準備開始,Parallel.for

和PLinq都是基於任務。

 

雖然Task可以表示任務的狀態,但是對於非同步任務卻並不特別試用。因為非同步任務並不是在當前程式完成的,需要利用作業系統或者遠端伺服器,

那麼,當任務執行在作業系統或者遠端計算機的時候,這段時間,執行緒就是阻塞狀態。

為此,微軟公司推出了async和await,await是編譯器為你寫的程式碼,執行程式碼肯定需要花費時間,所以await會減慢程式的執行速度,await的作用

是:當你執行一個非同步任務的時候,使你的執行緒返回程式,這段時間任務的執行是在作業系統執行或者是在遠端計算機上,所以你的執行緒可以繼續

做其他的工作,將來的某個時候,執行緒池執行緒會通知Task物件,後者執行await後面的程式碼,執行編譯器為你生成的程式碼,查詢任務狀態。

好文要頂 關注我 收藏該文