gpt4 book ai didi

c# - 从 Asp.net 线程池获取线程?

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:13 26 4
gpt4 key购买 nike

当我运行一个 Asp.net(cs 文件)页面时:

并使用 BeginInvoke() 创建 Thread T = new Thread(...)

线程是否取自 Asp.net 保留线程池?

编辑

Essentially, .NET maintains a pool of threads that can handle page requests. When a new request is received, ASP.NET grabs one of the available threads and uses it to process the entire page. That same thread instantiates the page, runs your event handling code, and returns the rendered HTML. If ASP.NET receives requests at a rapid pace—faster than it can serve them—unhandled requests will build up in a queue. If the queue fills up, ASP.NET is forced to reject additional requests with 503 “Server Unavailable” errors.

我不想影响 Asp.net“请求线程...”

enter image description here

最佳答案

当你使用new Thread()时,它实际上创建了一个与ThreadPool无关的新线程。

当您使用 Delegate.BeginInvoke() 时,委托(delegate)在 .Net ThreadPool 上执行(没有特殊的 ASP.NET ThreadPool)。

通常,如果您使用ThreadPool 来执行短期运行的任务,如果您需要运行长时间运行的任务,则最好手动创建一个线程。另一种选择是使用 .Net 4.0 Task,它为您提供更好、更一致的 API。 CPU 绑定(bind)的 Task 通常在 ThreaPool 上运行,但您可以指定一个 LongRunning 选项,以便它们创建自己的线程。

一般来说,您可能不必担心 ThreadPool 会饿死,即使在 ASP.NET 应用程序中也是如此,因为限制足够高(至少在 .Net 4.0 中,它们有点在以前的版本中较低)。如果确实遇到这些问题,可以尝试增加ThreadPool 中的线程数,或者可以使用单独的线程池(这需要一些代码,但您应该可以找到代码这个在互联网上)。如果您使用 Task,使用自定义线程池会更容易,因为这意味着只需切换 TaskScheduler

关于c# - 从 Asp.net 线程池获取线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10495168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com