0

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

4

2 回答 2

1

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

这显然是一种简化。

于 2011-03-22T17:51:19.653 回答
0

取决于操作系统

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

在 Linux 上;您可以通过任务集将进程绑定到 1-n 个处理器/内核

不知道在windows上

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

于 2011-03-22T20:26:53.837 回答