多线程有用到什么程度?

问题描述:

  • 我有一个任务可以分成多个独立的子任务,每个子任务都可以在Java中的一个单独的线程中运行。
  • 我想知道什么是线程的最佳数量之后增加线程的数量不会导致任何性能增益。
+0

受处理器数量限制 – blob

+0

@blob:不,在一般情况下不是。只有当任务受CPU限制时才是如此。如果他们主要是在执行IO,那么它不受处理器数量的限制。 –

+0

@布鲁诺我同意,发布了一个提供信息的链接,作为回答 – blob

有许多因素在这里。如果您的任务受CPU限制,则只受处理器/内核数量的限制。如果您的任务倾向于IO绑定,那么您可能会受益于比处理器/内核更多的线程。多少取决于你的任务花费在IO上的时间,相对于他们花费多少时间来进行实际的计算。

所以,像往常一样,这取决于你在做什么。

对于CPU绑定进程,运行线程的数量不应超过内核数量。

最后,您需要尝试不同的配置并查看最佳效果。

+0

+1:对于一些CPU密集型任务来说,核心数* 2是最优的。通常它只是你说的核心数量,但是如果你对你的代码进行基准测试,你可能发现double会稍微好一些。再次,它取决于你在做什么,因为对于一些任务,最佳数字是1.;) –

+0

当你改变这种配置时,你应该总是测量。你有核心* 2断言的参考,彼得?我有兴趣了解哪些类型的任务可能属于该类别。 –

+0

这只是尝试所有选项来找到最佳组合的问题。核心* 2来自经验。 –

入住这post Brian Goetz撰写,很旧但翔实