Java7 fork/join是否保证在单独的CPU中执行线程
最近,我开始了解Java7 fork/join框架——我学到的是,它对于分而治之的问题非常有用Java7 fork/join是否保证在单独的CPU中执行线程,java,multithreading,fork-join,Java,Multithreading,Fork Join,最近,我开始了解Java7 fork/join框架——我学到的是,它对于分而治之的问题非常有用 我的问题是,框架是否保证在单独的CPU上执行线程?或者,事件是否可能指示我使用并发包类创建的线程在我的服务器中可用的单独CPU上运行?它将基于标准JVM并发原语构建,在这种情况下,它们将(最终)被调度到真正的OS线程上。您不能保证您的操作系统调度程序将线程调度到单独的CPU上,尽管在大多数情况下很可能是这样 试图猜测并发调度器在运行时将要做什么是一个非常糟糕的主意。只要假设您能够使用的CPU数量不超过
我的问题是,框架是否保证在单独的CPU上执行线程?或者,事件是否可能指示我使用并发包类创建的线程在我的服务器中可用的单独CPU上运行?它将基于标准JVM并发原语构建,在这种情况下,它们将(最终)被调度到真正的OS线程上。您不能保证您的操作系统调度程序将线程调度到单独的CPU上,尽管在大多数情况下很可能是这样
试图猜测并发调度器在运行时将要做什么是一个非常糟糕的主意。只要假设您能够使用的CPU数量不超过活动线程的数量,不要试图猜测运行时的行为,除非您尝试进行某种特定的非常低级的优化。至少它会尽最大努力。fork/join框架旨在利用多个处理器。默认情况下,创建ForkJoinPool时,工作线程的数量等于处理器的数量 框架是否保证在单独的CPU上执行线程 不,不保证 或者,事件是否可以指示我使用并发包类创建的线程在服务器中可用的单独CPU上运行 不使用标准Java库。理论上,如果您愿意深入研究JVM的本机层,任何事情都是可能的(在操作系统允许的范围内)。但你将面临许多不必要的工作/痛苦 我的忠告是:
- 你可能不需要那种程度的控制。(IMO)本机线程调度程序的默认行为可能“足够好”以实现令人满意的性能
- 如果您真的需要这种级别的控制,那么最好使用不同的编程语言;i、 e.可以直接与主机操作系统的本机线程调度器交互的线程调度器。你甚至可能需要一个不同的操作系统