![](/img/trans.png)
[英]How to create threads in ASP.NET pages from CLR thread pool instead of ASP.NET pool?
[英]Threads being taken from the Asp.net Thread pool?
当我运行Asp.net(cs文件)页面时:
并创建Thread T = new Thread(...)
或使用BeginInvoke()
是否从Asp.net保留的线程池中获取线程?
从本质上讲,.NET维护着一个可以处理页面请求的线程池。 收到新请求时,ASP.NET会抓取其中一个可用线程并使用它来处理整个页面。 同一个线程实例化页面,运行事件处理代码,并返回呈现的HTML。 如果ASP.NET以快速的速度接收请求,而不是为它们提供服务,则未处理的请求将在队列中累积。 如果队列填满,ASP.NET将被强制拒绝具有503“服务器不可用”错误的其他请求。
我不想影响Asp.net“请求线程......”
当您使用new Thread()
,它实际上创建了一个与ThreadPool
无关的新线程。
当您使用Delegate.BeginInvoke()
,委托在.Net ThreadPool
上执行(没有特殊的ASP.NET ThreadPool)。
通常,最好是将ThreadPool
用于短期运行任务,并在需要运行长时间运行的任务时手动创建线程。 另一种选择是使用.Net 4.0 Task
,它为您提供更好,更一致的API。 CPU绑定Task
通常在ThreaPool
上运行,但您可以指定LongRunning
选项,以便它们创建自己的线程。
通常,您可能不必担心即使在ASP.NET应用程序中也会使ThreadPool
挨饿,因为限制足够高(至少在.Net 4.0中,它们在以前的版本中略低)。 如果你确实遇到这些问题,可以尝试增加ThreadPool
中的ThreadPool
,或者你可以使用一个单独的线程池(这将需要一些代码,但你应该能够在互联网上找到这个代码)。 如果使用Task
,则使用自定义线程池会更容易,因为这意味着只需切换TaskScheduler
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.