据说.NET Framework维护了一个线程池(.NET 4.5的默认值为5,000),用于处理ASP.NET请求。据说高并发长时间运行的请求会导致线程饥饿的情况,因此,对于高延迟调用,应该进行异步请求以释放请求线程。
但是,异步请求不是从线程池中生成另一个线程来完成工作吗?新线程是否来自与请求线程池不同的线程池?这些线程的创建数量是否有限制?
但是,异步请求不是从线程池中生成另一个线程来完成工作吗?新线程是否来自与请求线程池不同的线程池?这些线程的创建数量是否有限制?
ThreadPool.SetMaxThreads()
来增加它)。其他问题是每个线程使用1 MB的内存,这对于32位应用程序尤其成问题。此外,同时执行太多线程是低效的,因为需要进行上下文切换。”await Task.Delay(5000); int threadId = Thread.CurrentThread.ManagedThreadId;
,那么在这5秒钟内,该方法将不使用任何线程。但下一行代码将在某个线程上执行,ManagedThreadId
永远不会返回 null
或类似的内容。 - svick