9
當在IIS上的web應用程序中運行時,我有關於System.Threading.Threadpool的一般問題。 假設我們有2個請求立即執行,並且我們通過ThreadPool.QueueUserWorkItem方法啓動了幾個線程。這兩個請求是共享ThreadPool,還是兩個請求中的ThreadPool調用會在兩個獨立的池中運行?在IIS上下文中的線程池
這是IIS6和7
感謝任何見解。
當在IIS上的web應用程序中運行時,我有關於System.Threading.Threadpool的一般問題。 假設我們有2個請求立即執行,並且我們通過ThreadPool.QueueUserWorkItem方法啓動了幾個線程。這兩個請求是共享ThreadPool,還是兩個請求中的ThreadPool調用會在兩個獨立的池中運行?在IIS上下文中的線程池
這是IIS6和7
感謝任何見解。
下面是關於ThreadPool class MSDN文檔報價:
有每個進程一個線程池。 線程池的默認大小爲 250個工作線程每個可用的 處理器和1000個I/O完成 線程。
在IIS6和IIS7任何給定的ASP.NET應用被一個單一的過程(的w3wp.exe)通過應用程序池基礎設施的內部託管。
應用程序池可以將多個Web應用程序保留在不同的AppDomain中,但它可以在服務器上的一個物理進程內運行。
這兩個事實在實踐中意味着來自正在運行的Web應用程序實例的所有線程都在相同的.NET線程池內執行。
因此,這基本上意味着使用ThreadPool for Web應用程序需要將任務引發到多個線程中是一個壞主意。 – 2009-09-21 10:29:57
因爲所有的Web請求都已經異步處理,所以在大多數情況下,您不會從Web應用程序中的後臺線程中運行操作獲得任何顯着益處。 如果您不希望阻止請求處理等待長時間運行的操作,則可能會出現異常。在這種情況下,您可以啓動後臺線程,對請求做更多工作,然後在將響應發送到客戶端之前最終等待它完成。 – 2009-09-21 10:52:49
在我的情況下,我有一個服務在IIS上下文中運行,並向不同的搜索引擎發送X個傳出請求。這些應該在幾個線程中完成,因爲我想在這裏最大化速度。當所有線程完成後,我將結果收集到一個結果列表中並將其返回給調用者。 在這種情況下使用池的原因只是使用較少的內存,因爲它重用了池中的線程。但是如果我使用IIS使用的同一個池,那麼這可能不是一個好用的類。 – 2009-09-21 11:03:23