【发布时间】:2010-11-16 10:07:55
【问题描述】:
我正在编写一个使用大量 CPU 的 Java 程序,因为它的工作性质。但是,其中很多可以并行运行,并且我已经使我的程序成为多线程的。当我运行它时,它似乎只使用一个 CPU,直到它需要更多然后它使用另一个 CPU - 我可以在 Java 中做些什么来强制不同的线程在不同的内核/CPU 上运行?
【问题讨论】:
-
我不确定你在问什么,现在我想了想。您是在问 (a) 如何让它在多个线程中运行 (b) 为什么多线程代码使用的内核不超过一个内核或 (c) 为什么 CPU 负载不均匀分布?
-
您的应用程序没有足够的可独立运行的任务来一次使用多个 CPU。这个问题不太可能出现在您的操作系统中,因为这些问题已经经过数百万多年来的测试。您应该再次查看您的程序,以查看您希望同时运行哪些任务,同时尝试确定是什么阻止了这种情况的发生。
-
Peter,如果一个应用程序运行两个线程,那么它就有足够的东西在多个内核上运行。即使所有其他线程所做的只是启动和终止,仍然有工作负载可在第二个核心上运行。 -- 仅仅因为每个线程目前似乎没有高工作负载,就将单个内核分配给多个线程,这是适得其反的。同步到一些非 CPU 工作负载的想法怎么样(例如一个通用的附加计算板,表明它已经完成了它的工作负载)。线程亲和性非常很重要! Java 应该支持这一点。
标签: java concurrency multithreading multicore