作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我和一个 friend 正在争论线程池中的线程数应该是处理器计数+ 1还是仅仅是处理器计数。
我之所以选择处理器数量,是因为每个处理器可以分配偶数个线程,而他选择处理器数量+ 1是因为他认为这将帮助他优化性能。
谁是正确的?
最佳答案
你们俩都没有
正确的答案是:您需要多个产生最佳总体结果的线程。
您添加的每个线程都有一个成本。这是一个很小的成本,但绝对是一个成本。将30,000个线程放入线程池,并观察您的系统停止运行(如果它们都在做某事)。
但是从概念上讲,每个线程都可以为您节省一些(总体)时间。
从概念上讲,您可以绘制该关系并生成一定范围的线程,在某些资源限制下,这些线程将为您提供所需的结果。正确的线程数在该范围内。
注意:我说“总体结果”。那不一定是“最快的结果”。一个线程可以在10分钟内完成一项任务。 15秒钟内可以有100个线程。 10个秒之内可能有1000个线程执行此操作,因为您开始遇到特定问题的争用限制。这是更好的整体结果吗? 10和15秒之间可能没有真正的区别,但是1000个线程可能会使用更多的内存。
请记住,并非所有线程都受CPU限制,因此在很多情况下,拥有比内核数更多的线程是很合理的,因为在执行任务的某个时刻,线程可能在等待某事发生时就处于休眠状态(网络通信) ,磁盘读取,无论如何)。
关于multithreading - 常规-线程池中的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242260/
我是一名优秀的程序员,十分优秀!