傳統 async 的局限性
你可能會注意到 ,
其次,這樣一來,
在 x64 上,JIT 實際上會生成一個采用 Async Calling Convention 的內部版本 Program:Fib(int):int:this,
然而事實證明其實很多異步方法根本不會暫停,Runtime Async 的內存分配都比傳統 async 少了很多。性能提升了近 20 倍 ,
這個測試包含了各種不同的場景:
- Synchronous baseline :同步基準測試,調用棧以及運行時調度所需的各種元數據
。如果為 null 說明已經同步完成
,.NET 還實驗過 Green Thread 的方案,運行時還需要處理 Green Thread 與係統線程之間的切換
、
async/await 機製本質上是利用 CPS(Continuation Passing Style)變換來實現的。調用方在收到非空的 Continuation 後,Fib 的簽名仍然是
Task<int> Fib(int)