My Understading:async如何在ASP.NET web應用程序中工作?
異步與線程不同。在Async中,我們使用單個線程並可以從中運行多個任務。在.Net framework
中,我們有一個線程池,它在每個新的http web請求上分配一個新的線程。所以每個請求都由一個線程處理。但是,IIS
沒有自己的線程池,它使用CLR的線程池。
如果我們在web請求中創建任何新的附加線程,那麼我們從線程池中丟失一個線程,並且如果您的站點有很多流量,那麼您的站點用戶有 等待,直到任何線程獲得空閒。所以最好在ASP.Net應用程序中使用異步任務。異步任務將在執行主要Web請求的單線程中執行。
async如何工作。假設我們在控制器中創建兩個獨立/異步任務,假設它們是T1和T2。 T1執行一段時間間隔,然後執行T2。然後再次主要的Web請求。他們通過使用時間片來使用CPU。
Web Request -----> Single Thread Pool Thread (Main Request + T1 +T2)
=>
Execution Lifecycle --> [Main request, T1, T2, T1, Main Request, T2, T1.....]
,如果我們使用await Task.WhenAll
然後我們的主線程被釋放,並返還給線程池,一旦所有的任務完成,我們給予 我們的線程回來繼續。
首先,清楚我的概念,如果我哪裏錯了?
然後,我有幾個困惑:
- 如果我們的線程給線程池,然後該線程將工作 賴以在WhenAll任務。
- WhenAll完成後我們是否給予相同的線程 或者我們隨機給出一個新的線程?
[沒有線程](http://blog.stephencleary.com/2013/11/there-is-no-thread.html) –
爲什麼你在乎'哪個'線程?如果線程被重新使用,它是否會計數'相同'線程?我認爲這其中的一點是要抽象這些細節,以便您不必在意...... – Milney
看起來您似乎將ASP'SynchronizationContext'實現以某種方式等同於實現WPF或Winforms實現。這不完全相同。 – Gusdor