ASP.Net的工作線程與請求隊列


當 ASP.NET 接收針對頁的請求時,它從線程池中提取一個線程並將請求分配給該線程。

一個普通的(或同步的)頁在該請求期間保留線程,從而防止該線程用於處理其他請求。如果一個同步請求成為 I/O bound(例如,如果它調用一個遠程 Web 服務或查詢一個遠程數據庫,並等待調用返回),那么分配給該請求的線程在調用返回之前處於掛起狀態。 這影響了可伸縮性,原因是線程池的可用線程是有限的。

這個數字的設置是在 machine.config 的 下述節點的 maxWorkerThreads 屬性

<system.web>
 <processModel requestQueueLimit="num|Infinite" maxWorkerThreads="num"  />
system.web>maxWorkerThreads 按 CPU 配置用於進程的輔助線程的最大數目。例如,如果單處理器服務器上的該值為 25,ASP.NET 使用運行時 API 將進程限制設置為 25。在雙處理器服務器上,該限制設置為 50。該屬性的值必須等於或大於 httpRuntime 配置節中的 minFreeThread 屬性設置。 該屬性的范圍是從 5 到 100。 ASP.net請求隊列上述設置中,還有一個隊列設置,如下:requestQueueLimit 指定隊列中允許的請求數,超過此數目后,ASP.NET 將開始向新請求返回“503 - 服務器太忙”消息。  默認情況下,這個可用分線程數為1000。下圖為IIS6和IIS7中這個參數的設置地方。IIS 7 的可用線程數設置IIS 6 的可用線程數設置 如果所有請求處理線程全部阻塞以等待 I/O 操作完成,則其他請求排入隊列等待線程釋放。 最好的情況是吞吐量減少,因為請求等待較長的時間才能得到處理。 最壞的情況則是該隊列填滿,並且 ASP.NET 因 503“Server Unavailable”錯誤使后續請求失敗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM