每次连接到ASP.net应用程序时都会创建一个新线程?

时间:2009-10-15 01:28:44

标签: c# asp.net multithreading tcp

情况: 我的ASP.net应用程序通过TCP连接连接到另一个系统以获取信息

我正在尝试模拟100人坐着和同时登录到我的ASP.net应用程序并连接到TCP连接

创建一个具有100个线程的Windows应用程序,试图连接到TCP连接,提供正确的模拟/精确结果

OR

ASP.net是否以不同方式处理不同的实例。

3 个答案:

答案 0 :(得分:4)

ASP.NET有一个“工作线程”池,它将分配给新请求,直到池用完为止。然后将请求排队等待,直到工作线程返回到池中(通过以前的请求以某种方式结束)。

默认情况下,我相信有20种可用。 Microsoft建议的最大值为100。

所以,回答你的问题 - 如果这样配置,你的web应用程序可以(大约)100个线程同时发出TCP请求(虽然注意实际的TCP操作是在I / O线程上完成的,所以从技术上来说实际上是连接到目标的线程数可能略少。)

答案 1 :(得分:2)

  

是否为每个asp.net请求创建了一个新线程?

我对请求管道的理解并不完美,因此这可能不是100%准确。但据我了解,每个时间都不会创建新的线程。它使用一个线程池,因此您可能会重复使用先前请求中的线程,或者甚至可能需要等待几毫秒才能使池中的线程可用。因此,如果池未满,则会创建一个新线程。

答案 2 :(得分:0)

如果您正在编写使用.NET 3.5 SP1测试负载的应用程序,并使用HttpWebRequest来测试它,请确保在app.config中包含这些设置以将并发连接限制增加到超出默认值2的单个Web服务器。话虽这么说,您可能不得不从多台计算机上访问Web服务器以产生相当大的负载来真正测试服务器容量。

<?xml version="1.0" encoding="utf-8" ?>
<configuration> 
  <system.net> 
    <connectionManagement> 
      <add address="*" maxconnection="100" /> 
    </connectionManagement> 
  </system.net> 
</configuration> 

正如其他人所说的那样,请确保ASP.NET网站的线程限制也设置得同样高。