我正在研究一个并发分配问题,它涉及并行处理性能问题。这个问题涉及到相当数量的阻塞I/O,所以对于我想要使用的报告并比较各种方法的CPU使用情况。无法让java使用多个核心
我是新来分析,我已经开始使用Java的虚拟虚拟机,但即使多线程运行一个没有阻塞的紧密循环,我似乎无法获得50%以上的CPU CPU。这似乎是我的两个核心中只有一个正在使用。
如何让我的线程使用两个内核?我已经尝试了手动创建线程和使用executor框架。
在此先感谢
我正在研究一个并发分配问题,它涉及并行处理性能问题。这个问题涉及到相当数量的阻塞I/O,所以对于我想要使用的报告并比较各种方法的CPU使用情况。无法让java使用多个核心
我是新来分析,我已经开始使用Java的虚拟虚拟机,但即使多线程运行一个没有阻塞的紧密循环,我似乎无法获得50%以上的CPU CPU。这似乎是我的两个核心中只有一个正在使用。
如何让我的线程使用两个内核?我已经尝试了手动创建线程和使用executor框架。
在此先感谢
我不知道你的代码是干什么的,但这种设法把我所有的内核高达100%......
import java.util.concurrent.*;
public class Test implements Runnable {
public static void main(String[] args) throws InterruptedException {
Test task = new Test();
int threads = Runtime.getRuntime().availableProcessors();
ExecutorService pool = Executors.newFixedThreadPool(threads);
for (int i = 0; i < threads; i++) {
pool.submit(task);
}
pool.awaitTermination(120, TimeUnit.SECONDS);
}
@Override public void run() {
System.out.println("Task running...");
int i = 0;
while (true) {
i++;
}
}
}
int processors = Runtime.getRuntime().availableProcessors();
for(int i=0; i < processors; i++) {
Thread yourThread = new AThreadYouCreated();
// You may need to pass in parameters depending on what work you are doing and how you setup your thread.
yourThread.start();
}
这样你可以解决你的问题!
只有当你运行的任务永远不会被阻塞时才会起作用。 –
您的代码存在问题。不幸的是,你还没有发布任何代码,这使得很难看到问题出在哪里。请发布一个简短但完整的示例来演示该问题...... –
总CPU使用率由操作系统控制 - 不直接由JVM控制 - 因此可能操作系统允许JVM使用CPU的50%,其中您的线程效率很高(在并发使用中) - 你能看到Visual VM显示两个线程每个CPU运行多少CPU吗? – Bhaskar
也许你确实在使用核心,但除了一个之外的所有线程实际上都在等待IO操作? – bestsss