Поиск времени выполнения многоядерного кода в Java - PullRequest
0 голосов
/ 28 февраля 2012

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

Многоядерный код выглядит следующим образом: (Обратите внимание, что я не делаю ничего слишком сложного, просто пытаюсь определить продолжительность его работы. Время выполнения процессора в Java убедило меня использовать System.nanoTime() вместо .currentTimeMillis())

 long start = System.nanoTime();
 Runnable r0 = new FindMagicBrute(n);
 Thread t0 = new Thread(r0);
 Thread t1 = new Thread(r0);
 Thread t2 = new Thread(r0);
 t0.start();
 t1.start();
 t2.start();
 long end = System.nanoTime();
 System.out.println("Multithreaded run ended in " + (end-start) + " nanoseconds.");

Есть ли способ определить, когда поток прекратил выполнение?

1 Ответ

2 голосов
/ 28 февраля 2012

Вы должны дождаться окончания потоков, вызвав join для каждого из них.

В противном случае вы не синхронизируете ничего, кроме времени, которое требуется для создания потоков.

...