處理緒(Process)是一個系統層級用來描述一組資源和程式執行所需的記憶體分配。對於每一個被載入到記憶體的*.exe,在生命週期中,系統會建立一個單獨的處理緒。
每一個處理緒都有一個用於進入程式的進入點的主執行緒(Main Thread)。換句話說,執行處理緒的第一個執行緒稱為主執行緒。
如果一個作業大部分的時間都在等待某個條件的發生,稱為I/O Bound作業,如:網頁載入時所下載的CSS、JS和圖片等等,如果作業的時間都在用於執行CPU運算,那稱之為Compute Bound(=CPU Bound)。
Synchronous再Longman字典的定義,「If two or more thing are synchronous,they happen at the same time or work at the same speed.」,意旨是一種有序或循序的執行流程。
如:程式執行流程由上而下,左而右的方式執行。
因為不同工作之間的處理速度不同,因此在多個工作之間必須協調彼此的進度,所以出現了「等待」時間,就像我們走路踏出左腳後,必須等右腳移動才能繼續往下一個動作執行一樣。
相對於同步,非同步意旨一種無序或平行的執行方式,再執行順序不影響結果的情況下,就能以平行執行的方式更快速得到結果,非同步處理作業在返回呼叫者之後才完成他的工作。
屬於System.Thread.Task
命名空間是.NET Framework 4.0所提供,作為工作平行程式庫(TPL)一部分,與Thread相比,Task是一個更為抽象的概念,他代表一個可透過或不透過執行緒實行的平行作業。
再asp.net mvc實作其實很快,只要再新增Controller的時候勾選
「使用非同步控制器」
即可自動產生非同步的Action
前端常利用AJAX技術來減少畫面鎖定與回應的問題,但伺服器應用程式或是Mobile的APP越來越依賴向RESTful Web API來存取服務,但像大量的SQL語法運算、網路速度載入延遲等等問題依舊會造成等待時間導致鎖定問題。
再Method錢加上async修飾詞,此方法為非同步方法,特色為含async修飾詞、包含零到多個await結果、無await運算子只會發出警告,不影響城市建置與執行
無加的情況public ActionResult Get()
有加Asyncpublic async Task<ActionResult> Get()
回傳型別要修改為Task<TResult>
,加入後必須了解幾件事:
await
視為一個關鍵字。void
、Task
與Task<TResult>
型別的方法上。