我正在研究一個併發分配問題,它涉及並行處理性能問題。這個問題涉及到相當數量的阻塞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