簡體   English   中英

.NET Web應用程序本機使用了多少個線程?

[英]How many threads does a .NET web application natively use?

這一直困擾着我。 假設我沒有使用任何顯式形式的任務並行(例如Paralell.ForEach ),當我將Web應用程序部署到Windows Server時,本機使用了多少個線程?

換句話說,如果Web服務器具有八核處理器,那么如果我沒有明確告訴它使用更多內核,那么應用程序是否只使用其中一個內核?

我敢打賭,我在這里錯過了一些簡單的東西,所以火上澆油 - 但我還是想知道答案。 謝謝。

首先,您必須考慮Web服務器本質上是一個多線程系統,因為它必須能夠同時響應多個請求(有一些方法可以在單線程環境中執行此操作,但是它效率不高,IIS不支持它。 如果兩個用戶同時訪問該站點,則在大多數情況下,兩個單獨的線程正在為每個請求提供服務。

一旦遇到可伸縮性問題和異步支持,那么一個線程實際上可以為多個請求提供服務(或者更確切地說,可以將請求放在隊列中,並且可以重用IIS工作線程來處理其他請求)。

所以你從單個用戶的角度來看這個。 並且該單個用戶可能在該Web請求期間僅運行單個活動線程(忽略異步,完成端口等等)。 也就是說,你可以認為單個Web請求在一般意義上等於單個線程(但是有很多東西可以脫離其他線程,這不是你真正可以依賴的東西)。

當您使用Parallel.ForEach之類的東西時,您的單個用戶請求現在可以在多個線程中執行操作以提高效率。

IIS網站具有與之關聯的工作進程。 可以配置和調整該工作進程以控制它使用的線程數。 但請記住,您的網站是在IIS的控制下運行的,而不是它自己的應用程序。

隨着.NET版本的發展,線程主題會變得非常混亂。

但要過度簡化,這取決於ASP.NET的processModel配置。 (machine.config) autoConfig = true / false等。

在.NET 4.0中,最小/最大WorkerThreads和最小/最大IOCompletionThreads確定了正在播放的線程數量。

例如,如果minWorkerThreads = 1(默認值),那么整個minThreads = 1 * no:of cores ..與maxWorkerThreads相同。

基於負載,工作進程可以使用未公開的算法來增加服務請求所需的線程.. minWorkerThreads to maxWorkerThreads。 (當然基於ThreadPool線程的可用性等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM