如果我有N个核心和cpu绑定的工作要做(没有IO,没有阻塞调用),我可以将其拆分成任意数量的不相关的块,那么有多少线程可以优化这个?它会是N吗?在这种情况下有多少线程是最优的
0
A
回答
0
如果启用超线程,理想的线程数等于硬件线程的数量,该数量等于核心数量,或者核心数量为2。
但是,当你说你“可以将[工作]分成任意数量的不相关的块时要小心”。也许这是一组要处理的项目,或者其他相当的东西?如果每个项目的处理时间不变,那么您可以静态分割工作并将其分配给不同的线程。但是,如果不同的项目可能需要大量不同的执行时间来处理,则此策略可能不是最佳的。的确,一个线程很可能需要 - 比方说 - 一分钟来处理1000个项目,而另一个线程需要一个小时来处理1000个不同的项目。
最简单的方法是让框架为您处理。使用Parralel.For
(或类似的方法)可能比手动创建线程更好。
2
这将是N
。
用于工作的最佳线程数通常是可用于工作的内核数。这将在每个核心上放置一个线程,而不交换空闲内核。
根据具体应用和要求,此规则总是有例外。但从一开始就是一个很好的经验法则。
相关问题
- 1. 在这种情况下,最佳纹理尺寸是多少?
- 2. 在这种情况下使用线程?
- 3. 是在这种情况下
- 4. 在这种情况下,C++中* pointer + 2的值是多少?
- 5. 在这种情况下我应该有多少列?
- 6. 在这种情况下有多少测试用例?
- 7. 这种情况下每秒的带宽是多少?
- 8. 这种情况下的neo4j社区版容量是多少?
- 9. 这种情况下的收益率是多少?
- 10. 每种情况下的最大文件大小是多少?
- 11. 递归在这种情况下的最优解决方案?
- 12. 这种情况下最好的情况是什么?
- 13. Java:我应该在这种情况下使用多线程吗?
- 14. 如何在这种情况下实现多线程?可能吗?
- 15. 在这种情况下SQLite线程是否安全?
- 16. 这种情况下有多少SQL查询(PHP)?
- 17. 在这种情况下订购了多少次IEnumerable?
- 18. 在这种情况下
- 19. 和|| =在这种情况下
- 20. 在这种情况下
- 21. 在这种情况下
- 22. 在这种情况下
- 23. 优化 - 在这种情况下,工会是最好的方式吗?
- 24. 那里是在这种情况下
- 25. 什么是在这种情况下
- 26. 什么是在这种情况下
- 27. 在这种情况下有什么优点和缺点?
- 28. Javascript原型 - 在这种情况下有什么优势?
- 29. 有什么用在这种情况下
- 30. C++:这种情况下引用的优点是什么?
用不同的值进行试验并找出你自己。 – Servy 2014-09-12 15:24:07
如果你真的想使用线程(而不是'任务',例如),我建议你使用'ThreadPool',它管理你现在正在担心的大部分事情。 – 2014-09-12 15:24:51
@ThorstenDittmar因此,如果我要使用'ThreadPool'中的'N'线程,然后使用1000 *'N' - 它会是一样的吗? – ren 2014-09-12 15:26:40