2013-01-21 41 views
0

我推斷,因爲ASP.NET Web應用程序被授予工作線程固定數量和I/O線程,這是由<processModel>設置在管轄web.config文件對於一個擁有大量用戶的大型網站來說,沒有什麼特別的好處,可以旋轉新的工作線程或使用.NET ThreadPool中的線程來執行諸如記錄錯誤或發送電子郵件等任務。使用工作線程或線程池線程異步I/Web應用程序Ø

換句話說,假設在我的web應用程序中,對於每個進入的請求,請求處理程序都在一行中執行3個任務,即任務A,然後是任務B,然後是任務C,然後返回結果,這是一個HTML頁面。

然而,出了三個任務,任務B沒有對所得HTML的任何影響。這可能是一個任務,例如在日誌文件中記錄一段文本。然後,如果我將任務B移動到另一個工作線程,而CurrentThread(它也是來自ASP.NET工作線程池的工作線程)將返回得更快,並且會爲我的應用程序的更快響應時間用戶,我的應用程序可以服務的併發用戶數量將受到影響,因爲任務B將需要來自同一個ASP.NET工作線程池的新工作線程分配。

因此,我理解正確的,在Web應用場景:分叉新主題將產生積極的影響性能,但是會產生不利影響的可擴展性。因此,如果我們通過購買大量硬件來擴大規模,那麼我們只能編寫多線程服務器端代碼?

如果沒有,那麼我們只交易過一個其他?

回答

1

你的問題的核心似乎是:「 會使用其它線程異步處理次要的擔憂,阻礙了我對大型立式性能即連接數每個Web服務器可以處理一次能力

通常不會有更多的活動被處理的請求比有線程。每個虛擬CPU內核(邏輯處理器)有100個線程分配到.Net線程池中。您可以通過以下電話ThreadPool.GetAvailableThreads Method在您的機器上進行測試。

根據我的經驗,簡短回答是「是」,但只有當Web服務器的CPU是應用程序流量負載的瓶頸時纔是如此。因此,如果Web服務器正在等待數據庫,或者等待API調用返回,那麼在最大化CPU之前,可能會將其他資源最大化。

試圖按比例的獨立的處理任務的處理時推薦的解決方案,是使用隊列,如Microsoft Message Queue,或RabbitMQ。然後,您可以根據需要在「服務」計算機上單獨專用多個線程,以完成這些與請求無關的任務,同時最大限度地充分利用您的Web服務器資源。

用於脫機處理隊列中也易於擴展。小型時,您可以在同一個盒子上運行所有這些服務,但是當您需要更多處理能力時,您可以將該服務移動到另一臺機器或所需的多臺機器上。

此鏈接question and answer有幾分相似。