Лучший способ разделить цикл на потоки? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть цикл, который повторяется 8 раз, и я хочу запустить каждый цикл в отдельном потоке, чтобы он работал быстрее, я посмотрел его в Интернете, но не могу найти способ сделать это.В цикле нет общих ресурсов.Есть идеи?Извините за плохой английский

1 Ответ

0 голосов
/ 21 ноября 2018

лучший способ - это проанализировать вашу программу и выяснить, как ее можно сравнить с оптимальной стоимостью по сравнению с производительностью.Потоки, даже в таких языках, как go, имеют нетривиальные накладные расходы;а в таких языках, как java, это может привести к значительным накладным расходам.

Вы должны понимать, какая стоимость отправки операции в поток зависит от времени ее выполнения, и какие модели выполнения вы моделируете.может подать заявку на это.Например, если вы попытаетесь:

for (i = 0; i < NTHREAD; i++) {
      t[i] = create_thread(PerformAction, ...);
}
for (i = 0; i < NTHREAD; i++) {
      join_thread(t[i]);
}

Вы можете подумать, что сделали это замечательно, однако поток NTHREAD-1 не запустится, пока вы не заплатите накладные расходы за создание других.Напротив, если вы создали потоки в древовидной структуре и ваша ОС не работает, вы можете получить значительно меньшую задержку.

Итак, лучшая практика: измерять, писать для общего случая и настраиватьдля конкретного.

...