異步多線程編程模型
電腦的處理器CPU處理時間程序時屬於並行處理,也就是同時運行處理的,而我們經常說的並發,其實只是看起來並行,但是還是類似於輪詢的。
現在好的處理器會有虛擬處理器,一個內核會有一個實際的處理器,也會產生一個虛擬的處理器,相當於四核八線程。
CPU會緩存未完成的線程,L1,L2,L3級緩存,如果不夠用,則會存在內存裏。
一個.NET程序運行則會形成自己的程序域,在自己的程序域中會加載自己的DLL,如果想刪除某個DLL,則需要刪除應用程序域。CPU執行程序域時會在自身生成一個線程去執行
線程創建時默認為前臺線程,(控制臺黑窗口)若為前臺線程頁面會等待線程結束才會結束頁面(黑窗口)。若為後臺線程,頁面則會在執行結束主線程後自動關閉(黑窗口),而此時子線程會在後臺繼續執行。
每次創建線程消耗過大,建議使用線程池完成多線程操作,創建線程池時池中已有閑置線程,線程池中線程為後臺線程。
異步有三種方式
異步委托 (APM),事件異步(EAP),任務異步(TAP)
異步委托 APM
第一次試驗
第二次總結
假如遇到一個費時的操作,先發出請求,接下來便去做其他操作,等到操作做完,查看開始的操作是否完成。
例如:
事件異步 EAP
下載一個網頁,成功後再執行其他操作(阻塞)
微軟方法中後綴為Async的方法為異步操作
任務異步 TAP
等待單任務完成
等待多任務完成
任務等待
task泛型操作
自己創建線程放入任務
線程池中線程執行任務
Awit & Async
異步的任務只能由異步的方法來調用
如果調用 Test 則會先執行“fafafafafaf”,然後才會打印網頁
PLINQ(處理器並行處理) 比 LINQ (單核處理) 性能要好
PLINQ
LINQ
IIS的異步
IIS工作線程有限, 不能夠占用過多
EF 的異步
建立數據庫表屬性
普通方法下EF異步
異步控制器下的EF
使用異步,可以使網站運行不阻塞,用戶體驗更好。
異步多線程編程模型