Как правильно считать время выполнения многопоточного алгоритма?

17b88d611cfc49cf931cdc047905957e.PNG
Вот простой код. По сути 4 потока почти равно мерно разбиваю массив на одинаковые доли и каждый из потоков, в своем диапазоне, выполняет 5-ти кратное увеличение всех значений массива на 2.
Как видно, каждый поток имеет свой экземпляр Stopwatch`а. Метод Times() высчитывает среднее значение времени выполнения всех поток и выводит в консоль.
Вопрос: Почему среднее время выполнения потоков находится около 940 мс, в то время как реальное время выполнения составляет около 5 секунд.
  • Вопрос задан
  • 2536 просмотров
Решения вопроса 1
aush
@aush
У вас потоки не одновременно выполняются. Join вынесите из цикла.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ну вы же не думаете что все 4 процесса работают постоянно? Если вы запустите ваше приложение с повышенным приоритетом процессора теоритически разница будет уже чуть меньше. Но все упирается в то сколько ядер процессора вам доступно. Так же не забывайте - не вы один на всем компьютере занимаете процессорное время.
Ответ написан
Комментировать
tsarevfs
@tsarevfs
C++ developer
Насколько мне кажется, вы вы создаете следующий тред только после того как предыдущий завершился. В результате вместо параллельного исполнения получается последовательное, и время суммируется.
Thread.Join "Блокирует вызывающий поток до завершения потока или истечения указанного времени..."
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы