Java:如何在每个处理器核心上生成多个线程?

时间:2010-09-15 03:34:40

标签: java multithreading cpu-usage

我有一个java应用程序,并且,我希望它利用多核处理器,我如何利用它们?产生一个新线程是否可以解决这个问题?操作系统决定将线程置于什么核心?

4 个答案:

答案 0 :(得分:2)

是的,操作系统可以完全控制线程的核心位置(至少在Java中)。你不应该担心这些事情。 :)只是产生你的线程,让操作系统完成工作。

答案 1 :(得分:0)

如果您想利用多核处理器,请尝试确定可以并行运行代码的位置。然后为并行代码创建线程。您不需要考虑为处理器内核分配线程,操作系统也会这样做。

答案 2 :(得分:0)

与其他人一样,调度本身由操作系统自动完成。

但是你仍然需要考虑线程策略。例如,您是否应该使用单个线程,因为它足以解决您的问题?或者您应该使用可用核心线程数,因为您的算法花费大部分时间在CPU密集型计算上?或者你应该使用更像2 * available-core线程数的东西,因为涉及一些网络?你应该使用可重新调整大小的缓存线程池吗?如果是这样,在没有工作负载时要维护多少线程,在工作负载瞬间增加后保持更大的池大小等等。

简单的经验法则是,1)使用单线程,除非你有理由使用多线程,2)使线程池大小可配置,然后通过反复试验找到足够的池大小(我倾向于使用固定大小的线程池,因为它使事情变得简单)。

答案 3 :(得分:0)

正如其他人所说,操作系统确定应用程序使用多少个核心,并处理将Java线程分配给核心的问题。因此,第一个答案就是创建线程并让操作系统处理它。

但要小心。如果您只是创建“许多线程”,那么您的应用程序可能不会更快。实际上,几乎可以肯定的是,新线程实际上会使应用程序变慢。 (不幸的是,这一点是应用程序特定的......很难预测。)

有效地利用多核处理器,您需要:

  • 设计您的应用程序,以便可以并行完成大量有用的任务,
  • 设计您的数据结构和算法以避免并发瓶颈,
  • 使用线程池或类似的东西来避免线程数量的爆炸,
  • 配置并调整应用程序。