java fork -join框架如何将任务分配到处理器上?

时间:2011-03-22 17:47:41

标签: java fork-join

任何人都可以解释java fork-join框架如何将任务分配给处理器。我们能控制它吗?

2 个答案:

答案 0 :(得分:1)

Fork连接样式框架通常使用工作窃取来安排任务。 即每个线程都有自己的调度程序。并且新任务在创建它们的同一个线程中排队。只有当一个线程的调度程序的队列变空时,它才会从另一个调度程序“窃取”任务,即工作。

这显然是一种简化。

答案 1 :(得分:0)

取决于操作系统

关于solaris;您可以将进程或LWP(线程)绑定到处理器集(可以包含1-n个处理器/核心)

在linux上;您可以通过taskset

将进程绑定到1-n个处理器/核心

在Windows上不知道

所以理论上答案在solaris上是肯定的,在其他2个平台上没有。对于solaris,我认为你需要调用一些jni来创建线程的绑定。或者,如果确保线程在启动时启动并且在vm的生命周期内永远不会被回收,那么您可以启动该过程,等待n秒然后使用jstack检查LWP,找到所需的线程然后绑定那些线程通过jstack输出中的nids(native id)预定义处理器集。 poolbind& pooladm& poolcfg是您在solaris上需要的相关命令。