2011-07-21 149 views
1

我正在使用C#4.0,ASP.NET MVC 3和IIS 7.0。我對IIS 7中的異步請求有點困惑。我已閱讀this文章和幾個論壇/博客文章,但沒有找到答案。這裏是我的問題,MaxConcurrentRequestsPerCPU和異步請求

我有一個應用程序,調用許多遠程服務。他們中的許多人反應非常緩慢。所以使用AsyncController將釋放我的應用程序線程。但在上面的文章中托馬斯說,IIS 7使用每個CPU的最大併發請求數,而不是每個CPU的最大併發線程數。所以我認爲使用AsyncController釋放線程不會影響整體應用程序的穩定性,因爲我們現在是請求特定的而不是線程特定的。所以如果我有6000個併發請求,使用AsyncController將只允許5000個請求同時執行。

更新:我只是想問,是否切換到AsyncController有什麼區別?

+0

最新的問題? –

+0

對不起,我更新了我的問題。 – user571646

回答

2

是的,異步操作可以更好地使用CPU /內存資源來處理網絡綁定的長時間運行任務。畢竟,這是MVC中添加這樣一個特性的確切原因。他們讓你避免每個請求長時間綁定1個線程。線程在內存資源方面比較昂貴,用於創建&維護。

當然,IIS默認配置爲一次只允許處理5000個異步請求(每個CPU),但您鏈接的博客非常清楚,這只是他們挑選的任意數字「因爲它很大」

如果您需要處理更多並且測試您的服務器可以安全地處理更多,那麼通過一切手段調整IIS配置以增加限制。爲了減少DOS攻擊等的影響,有一個好主意 - 除了實際測試了服務器處理負載的能力之外,你應該讓IIS做到這一點,並返回一個「太忙「錯誤

+0

謝謝,我很清楚。但我的觀點是,如果你是線程特定的(比如說,maxConcurrentThreadsPerCPU = 5000和maxConcurrentRequestsPerCPU = 0),那麼明確使用AsyncController將允許你處理超過5000個併發請求。但是,如果您是特定請求(maxConcurrentThreadsPerCPU = 0和maxConcurrentRequestsPerCPU = 5000),則不會這樣。如果您建議我使用maxConcurrentThreadsPerCPU而不是maxConcurrentRequestsPerCPU。 – user571646