我將log4net添加到我的應用程序中,現在可以在用戶瀏覽我的網站時看到用戶活動的線索ID。是否有任何特定的算法來分配IIS7的線程分配情況,還是隻是一個隨機數字分配(我懷疑它不是完全隨機的,因爲我的低流量站點顯示的線程大部分在10-30範圍內)?任何最大數量的線程可用?而且我注意到我的調度程序顯示了一個奇怪的線程ID - 這是什麼原因?調度器是Quartz.net,id顯示爲「Scheduler_Worker-10」,而不僅僅是一個數字。如何分配IIS7線程?
回答
This解釋所有你需要知道的。
的摘錄:
當ASP.NET在IIS 7.0中 集成模式託管,使用線程是 有點不同。首先, 應用程序級隊列不再。 他們的表現總是很差 不好,沒有希望修復這個,所以我們擺脫了他們。但也許 最大的區別是,在IIS 6.0 或ISAPI模式,ASP.NET限制的線程數併發 執行的請求,但在IIS 7.0 集成模式,ASP.NET限制 號同時執行 請求。當請求異步時,差別僅僅是 (該請求要麼具有 異步處理程序,要麼 中的模塊異步地完成 )。顯然,如果 多個請求是同步的,那麼 號同時執行 請求相同的 線程同時執行 請求數,但如果請求是 異步那麼這兩個數字 可以像你可以很不同 比線程有更多的reqeusts。
所以基本上,如果請求是同步的,每個請求的線程數相同。看到這裏各種parameters。
我已經解釋了這是一個博客張貼在我的博客 ASP.NET Performance-Instantiating Business Layers
標題不會與你的問題相符,但我解釋一下IIS處理請求的方式,我相信你有你的答案。
從文章引述
當IIS字段進行 應用程序的請求遞給它交給 工作進程。 轉的工作進程會創建您的 全局類(其類型爲 HttpApplication)的實例。從 的這一點開始,發生ASP.NET 應用程序的典型流程(ASP.NET 管道)。但是,你所需要的 認識和了解的是,工人 過程(認爲它作爲IIS真的) 保持的情況下你 的HttpApplication(您 全球類的實例)活着,爲了領域的其他 請求。事實上,它在默認情況下 它會創建並緩存到您的全球級的10種 情況下,如果根據負載 要求(延遲實例) 您的網站收到其他 因素 請求數。在上面的圖1中,您的ASP.NET應用程序 的 實例顯示爲紅色框。有 可能會被這些緩存的工作進程中的10個緩存到 。這些實際上是 線程,其工作進程已創建並緩存了 ,並且每個線程都擁有自己的Global類的實例 。 請注意,這些線程中的每一個都在 之間的同一個App域中。因此,您在 應用程序中可能具有的任何靜態 類都將在這些線程或應用程序的 實例中的每一個上共享。
我建議你閱讀那篇文章,我很樂意回答你可能有的任何問題。請注意,我故意保持文章的簡單性,因爲我不會談論內核中發生的事情,或者討論參與的各種組件的細節。保持簡單可以幫助人們更好地理解這些概念(我感覺)。
我來回答你的一些其他問題在這裏:
- 是否有任何具體的算法來分配線程與IIS7是如何發生的?
不,對於所有意圖而言,它的目的都是隨機的。這在我指出的文章中有解釋。簡短的回答是,如果緩存的線程可用,則II將使用它。如果沒有,它會創建一個新的線程,創建你的HttpApplication(Global)的實例併爲其分配所有的上下文。所以在一個不太忙的站點上,你可能會看到相同的線程處理請求。但是沒有保證。如果有多個空閒線程,IIS將隨機選擇一個線程來處理該請求。您應該在這裏注意,即使在不太繁忙的站點中,如果您的請求需要很長時間,IIS也將被迫創建新線程來處理其他傳入請求。
- 任何最大數量的線程可用?
是的(正如本文所述)每個工作者進程通常有10個線程。這可以調整,但我已經在一些非常繁忙的網站上工作,我從來沒有。關鍵是要儘可能快地響應你的應用程序。請注意,應用程序可以爲其分配多個工作進程(在應用程序池中進行配置),因此在繁忙的站點中,實際上需要爲應用程序提供多個工作進程,但意味着您擁有所需的硬件(CPU核心和內存)。
- 調度是Quartz.net和ID顯示爲 「Scheduler_Worker-10」,並不僅僅是一個數字
線程可以有名字的,而不是IDS。如果線程已被分配一個名稱,那麼你會看到,而不是一個ID。當然,對於IIS創建的線程,你沒有這種控制。請注意,我沒有使用(也不知道Quartz),所以我不知道這一點,但我猜是這樣。
- 1. OpenMP如何進行線程分配?
- 2. CUDA線程分配
- 3. CUDA線程分配
- 4. 如何線性分配值
- 5. 跨線程分配屬性
- 6. 線程堆棧分配
- 7. 內存分配與線程
- 8. 如何配置iis7 http 301重定向?
- 9. 如何爲Web同步配置IIS7
- 10. 路線重寫IIS7
- 11. pthread_mutex_unlock如何區分線程?
- 12. (IIS7)如何配置w3wp進程永不停機
- 13. 如何使用異步線程調整/分析線程池配置?
- 14. 如何在單線程服務中正確分配多線程消息流?
- 15. IIS7分析
- 16. CUDA線程如何分成經線?
- 17. 如何配置多線程程序?
- 18. 如何分配python程序?
- 19. 如何分配小程序
- 20. Java - 線程之間的處理時間是如何分配的?
- 21. 如何分配網狀工作線程來新的要求?
- 22. 如何在多個線程之間正確分配任務
- 23. 如何分配線程來處理Servlet請求?
- 24. 如何在python線程中分配大文件
- 25. 如何ThreadPoolExecutor的分配線程之間的任務
- 26. 如何將一個URL的請求分配給多個線程?
- 27. 如何預先分配線程池服務器的對象?
- 28. 視圖在後臺線程上解除分配:如何調試?
- 29. Java(JVM)如何爲每個線程分配堆棧
- 30. 如何將我的方法分配給線程?
我會假設它至少有1個線程分配給每個連接,然後可能是應用程序的幾個主線程(接受連接,管理全局應用程序狀態等)。我不會將此作爲答案發布,因爲這只是一個猜測。 – IDWMaster 2011-02-05 22:46:16