Лучшая стратегия для распределения рабочей нагрузки среди работников - PullRequest
0 голосов
/ 25 января 2020

У меня большой объем данных, которые я должен обработать, и я хочу использовать многопоточный подход. Допустим, у меня есть 1_000_000 объектов, которые необходимо обработать, и у меня есть пул потоков размером 4 (8, 16).

Какова лучшая стратегия для распределения этой рабочей нагрузки? Я могу думать о 2 вещах:

  1. Каждый объект = 1 задача для службы исполнителя. Кажется, это худшее решение, даже по сравнению с обработкой всего в 1 потоке.
  2. Разделите общее количество объектов на количество рабочих. Например, в случае с 4 рабочими каждый получит 250 тыс. Объектов для обработки. Это очень просто, и мне кажется, что могут быть и другие варианты.

Пожалуйста, поделитесь своими мыслями и другими подходами (возможно, что-то с FJP может быть более эффективным)

1 Ответ

0 голосов
/ 26 января 2020

Вы рассмотрели угловые случаи: 1 задача содержит 1 объект, а 1 задача содержит 250 тыс. Объектов. Очень вероятно, что лучший размер партии находится где-то посередине. Попробуйте эти конфигурации и запишите время, проведенное. Попробуйте также 8, 64, 500, 4k и 32k объектов. Тогда посмотрите на лучшее время. Если, например, лучшее время для 500, то попробуйте 125, 250, 1k и 2k, и так далее. Это похоже на бинарный поиск, но в логарифмическом масштабе c.

...