1. 程式人生 > >CLR VIA C# 閱讀筆記和感悟(三)

CLR VIA C# 閱讀筆記和感悟(三)

前言:如今.NetCore已經進入了2.1版本,但這本書的學習還是很重要,我們繼續學習和總結,以便於在.NetCore新技術的學習上能有個對比,幫助我們學習新知識。

執行緒池:執行緒的建立和銷燬都是要消耗資源的,所以微軟為了優化執行緒的使用,提出了執行緒池,執行緒池中的執行緒是可重用的,線上程初始化、程式啟動時,會根據CPU的核數量建立預設數量的執行緒,這些執行緒中有一個主執行緒一直處於活躍狀態,以便程式能夠響應,多餘的執行緒進入阻塞狀態,直到主動開啟執行緒時,這些執行緒才會再次活動,執行緒執行完畢則繼續阻塞,當啟動的執行緒數超過了執行緒池預設執行緒數量則會建立一個新執行緒,執行緒池的執行緒也不是一直存在的,當執行緒長時間不使用時,CLR會喚醒執行緒,並退出執行緒。

在過去,啟動一個執行緒用到的是Thread,ThreadPool類,他們在使用上不太方便,所以現在使用的是Task類,Task類啟動的執行緒也是由執行緒池託管的,並且提供了諸如取消,超時,延續等很方便的API介面。微軟也提供了async  await 關鍵字,他允許方法非同步執行和等待,這是一種通關狀態機來實現的機制,標記了並使用了async await的方法,最終都會由編譯器生成一個狀態機,並把方法的IL程式碼生成在狀態機中,在程式碼中的效果是程式碼會執行到await 那一行並在非同步方法完成時繼續執行await之後的程式碼。

對於多執行緒的學習我想專門放在一個章節中整理,多執行緒 原子操作 記憶體柵欄 鎖。

後記:這本書本來上個月就應該看完了,但無奈,中間有其他事情所以耽誤了這麼久。

最後書的連結在這裡:連結:https://pan.baidu.com/s/1KBCd-YSbfnbxgSicH-KyWg 密碼:sp9n