1. 程式人生 > >異步多線程編程模型

異步多線程編程模型

cpu 操作 委托 異步操作 ask 完成 bubuko 內存 net

電腦的處理器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

技術分享圖片

技術分享圖片

使用異步,可以使網站運行不阻塞,用戶體驗更好。

異步多線程編程模型