任何人都可以解释java fork-join框架如何将任务分配给处理器。我们能控制它吗?
答案 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上需要的相关命令。