多核世界中的Java Fork / Join与多线程

时间:2015-08-24 14:49:34

标签: java multithreading multicore executorservice fork-join

无法理解为什么Fork Join在多核利用率方面更胜一筹。

举例说明这一点(只是一个理论上的):

我有一系列的webservice端点:[E1,E2,E3,E4]

假设每个端点都返回一个数字。

然后我必须总结总数并返回结果。

记住这个简单的故事。

我有两个选择:

  1. ExecutorService fixedThreadPool of 4并行地追踪这4个调用。
  2. Fork Join框架包含4个任务。
  3. 假设我有4个核心。

    使用Executor服务,创建了4个JVM线程和AFAIK,它完全可以通过操作系统在相同的核心或多个核心上安排它们。

    如果他们被安排在同一个核心上,那么我们就会遇到核心利用不足的问题。

    如果他们被安排在不同的核心上,那么我们就笑了!

    所有我试图了解的是使用多个内核时的这种不确定性。

    Fork Join如何解决这个问题?它是否在内部向操作系统传递某种神奇指令以使用多个内核?

    如果上面的示例与Fork Join与Executors之间的比较无关,那么Fork Join如何声称它比传统的多线程更有效地利用内核。

1 个答案:

答案 0 :(得分:0)

Fork / join是一个更高级别的抽象。通常,如果您使用更高级别的库来解决您的问题,那么您将使用更少的新代码行来解决您的问题。这总是一件好事。

更高级别通常意味着更专业。叉/加入可能适合您的问题,也可能不适合您。如果它不适合,那么你可能会浪费很多精力并且通过尝试使它适合来制造可怕的混乱。

如果它确实适合,并且你没有使用它,那么很可能,你将重新发明一些轮子。这从来都不是一件好事。