Не могу заставить Java использовать более одного ядра - PullRequest
2 голосов
/ 07 октября 2011

Я работаю над назначением параллелизма, которое включает распараллеливание проблемы для производительности. Проблема заключается в значительном количестве блокирующих операций ввода-вывода, поэтому для моего отчета я хочу использовать и сравнить использование ЦП различными подходами.

Я новичок в профилировании, и я начал с Java vital vitm, но даже с несколькими потоками, работающими в тесном цикле без блокировок, я, похоже, не могу превысить 50% использования процессора. Может показаться, что используется только одно из двух моих ядер.

Как мне заставить мои потоки использовать оба ядра? Я пробовал как вручную создавать потоки, так и с использованием среды executor.

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 07 октября 2011

Я не знаю, что делает ваш код, но мне удается довести все мои ядра до 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++;
        }
    }
}
0 голосов
/ 07 октября 2011
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();
}

Таким образом, вы можете решить свою проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...