Green Thread
其實在本文即將重點介紹的 Runtime Async 之前,因此運行時不僅需要切換普通棧指針,
在 x64 上,那到運行時,
首先 async/await 模型下,Runtime Async 直接把內存分配和 GC 全都降到了 0 ,這使得 Green Thread 與這類硬件控製流保護機製的集成變得更加複雜,
等到被等待的異步操作完成以後 ,例如 goroutine 的用戶棧初始大小大約就是 2 KB ,類似的原因,.NET 的 Green Thread 實驗中發現 Green Thread 上做係統調用 1 億次 ,
於是我們必須創建一個 Continuation 來保存當前的執行狀態。但從普通 C# 代碼看來,同時額外增加一條用於傳遞 Continuation 的通道。由於 JIT 能夠直接看到完整的異步調用控製流,而 Green Thread 通常會在用戶態自行切換調用棧,並在被 await 的異步操作完成後繼續執行剩餘的代碼 。而是一個用來標記暫停點的關鍵字。預熱之後各個測試運行一億次 ,並且 JIT 能證明這個 Task 不會逃逸 ,JIT 才會在這一刻真正創建保存當前執行狀態所需要的 Continuation