gpt4 book ai didi

.net - 为什么 ThreadPool 默认每个处理器有 250 个工作线程?

转载 作者:行者123 更新时间:2023-12-04 23:09:47 29 4
gpt4 key购买 nike

摘自微软文档:

By default, the thread pool has 250 worker threads per available processor. You can change this setting using the ThreadPool.SetMaxThreads method.



也有人说,众所周知,有一些开销:

Threads have some level of overhead. Therefore, if a computer has multiple processors and you split processing into two threads, you won’t see a 100 percent performance improvement.



出于一些经验和更多的猜测,我会有类似 的东西。 1 到 4 每个 CPU 的线程数,而不是 250 !有人知道为什么是250吗?是否应该赋予 一些值(value)?最佳整体性能 ,或者是为了让您分配给该线程池的几乎所有任务都是 无需等待即可处理 完成其他任务?

最佳答案

动机不是表现。正如您所提到的,线程过多很容易导致性能下降(由于上下文切换、缓存抖动、争用等)。
这个神奇数字背后的想法是试图避免用户代码中出现死锁。如果开发人员将大量工作项排队到一个线程池中,而该线程池等待其他排队到线程池中的项目,则可能会导致死锁。如果出现线程池已使用其最大线程数(它们都处于等待状态)的情况,那么您将获得 僵局 .

当然,“250”这个数字并没有什么特别之处,如果开发者坚持使用线程池这种有问题的使用模式,仍然可能会出现死锁。但是,它应该减少在这种情况下陷入僵局的机会。

Joe Duffy 在他的帖子中更深入地解释了这个推理:Why the CLR 2.0 SP1's threadpool default max thread count was increased to 250/CPU .

关于.net - 为什么 ThreadPool 默认每个处理器有 250 个工作线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395217/

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