我是这样设置我的线程池的:
ThreadPool.SetMaxThreads(10000, 10000);
ThreadPool.SetMinThreads(20, 20);
但是,我的应用程序在负载过重时开始挂起。这似乎是因为工作任务没有执行:我曾使用 ThreadPool.QueueUserWorkItem
来运行一些任务,这些任务又使用相同的方法对进一步的工作进行排队。对于有限的线程池(死锁情况),这显然是危险的,但我使用线程池不是为了限制最大线程数,而是为了减少线程创建开销。
我可以看到那里的潜在陷阱,但我相信在池中设置最多 10000 个线程将意味着如果一个项目排队,所有线程都很忙,并且池中没有 10000 个线程,a将创建一个新的并在那里处理任务。
不过,我改成了这样:
ThreadPool.SetMaxThreads(10000, 10000);
ThreadPool.SetMinThreads(200, 200);
..应用程序开始运行。如果这使它开始工作,我是否遗漏了有关线程池如何/何时从最小大小扩展到最大大小的信息?
最佳答案
关于c# - 线程池行为 : not growing from minimum size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248199/