Баланс нагрузки одинаково среди нескольких потоков

Для моего школьного задания мне нужно сбалансировать нагрузку поровну между несколькими потоками в C. Например, мне нужно вычислить суммирование целых чисел в интервале [0, 50] уравновешивая нагрузку одинаково среди 5 потоков (интервал и число потоки - всего лишь пример, они могут быть гораздо большими значениями). Моя первая идея заключалась в том, чтобы разделить интервал на 5 меньших, например [0,10], [10,20]...[40,50] и назначить каждый из этих фрагментов одному конкретному потоку. Но потом у меня возникли некоторые сомнения относительно того, является ли вычисление суммы целых чисел в интервале [0,10] той же нагрузкой, что и вычисление суммы целых чисел в интервале [40,50], поскольку, очевидно, числа на последнем интервале больше, поэтому мне стало интересно, вычисляет ли 10x10 ту же нагрузку для процессора, что и 100000x100000? Должен ли я беспокоиться об этом? Ваша доброжелательная обратная связь будет высоко оценена.

PS Английский не мой первый язык, поэтому, пожалуйста, простите меня за мою грамматику.

1 ответ

Вы должны быть очень обеспокоены. Это плохой дизайн. Мало того, что некоторые интервалы требуют больше работы, чем другие, но некоторые потоки могут продвигать вперед быстрее, чем другие, по целому ряду причин, связанных с реализацией.

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

По сути, у вас есть очередь работы, которая должна быть выполнена. Нитки берут небольшие рабочие единицы из очереди и повторяются до тех пор, пока очередь не будет пуста.

licensed under cc by-sa 3.0 with attribution.