計算機進入多核時代,開發人員想要充分利用計算機內核,需要編寫多線程程序。線程屬於進程,理想狀態下,在4核的計算機上最好有4個線程。
早期的線程創建是利用 Thread類,線程的創建需要花費很多時間,基於此,微軟公司為開發人員創建了線程池,線程池具有智能爬山算法,可以
根據線程的使用情況,動態調整線程的增加或者減少,當線程使用完成后,線程不會銷毀,而是回到線程池中,當新的代碼需要線程執行的時候,
就可以利用這個已經創建好的線程,當一個線程一段時間不使用,它便會終結自己。畢竟,線程也需要占用空間。
線程的問題在於無法知道代碼是否執行完成,為此,微軟公司創建了Task,這個任務可以查詢到狀態,已完成,出錯或者准備開始,Parallel.for
和PLinq都是基於任務。
雖然Task可以表示任務的狀態,但是對於異步任務卻並不特別試用。因為異步任務並不是在當前程序完成的,需要利用操作系統或者遠程服務器,
那么,當任務執行在操作系統或者遠程計算機的時候,這段時間,線程就是阻塞狀態。
為此,微軟公司推出了async和await,await是編譯器為你寫的代碼,執行代碼肯定需要花費時間,所以await會減慢程序的運行速度,await的作用
是:當你執行一個異步任務的時候,使你的線程返回程序,這段時間任務的執行是在操作系統執行或者是在遠程計算機上,所以你的線程可以繼續
做其他的工作,將來的某個時候,線程池線程會通知Task對象,后者執行await后面的代碼,執行編譯器為你生成的代碼,查詢任務狀態。