Я ищу алгоритм для распределения некоторых задач.Проблема в следующем:
Скажем, у меня есть центральный производитель задач и некоторые клиенты-клиенты.Производитель генерирует задачи, а потребители берут задачи (для начала, по одной), обрабатывают их, а когда они выполнены, берут новые задачи (у меня уже есть очередь задач).
Дело в том, что если вы учитываете задержку для задачи, передаваемой от производителя к потребителю, может иметь смысл сгруппировать задачи вместе.Например, скажем, у нас всего 10 задач и 2 потребителя.Если для выполнения каждой из задач требуется 5 мс, а задержка сети также составляет 5 мс, отправка 2 групп по 5 задач в каждой для каждого потребителя займет 5 мс + 5 * 5 мс = 30 мс, а отправка задач по отдельности - 5 * 5 мс.+ 5 * 5 мс = 50 мс, поскольку задержка появляется для каждой задачи.
Это не так просто, как группировка, поскольку некоторые задачи, вероятно, займут больше времени, и имеет смысл отправлять их по отдельности, чтобы позволить другим потребителям параллельно обрабатывать другие задачи, которые занимают более короткое время.Я планирую сделать некоторую статистику относительно типа задач.Число потребителей также не является постоянным.
Любая идея о хорошем алгоритме или хорошем чтении, которая может помочь мне в достижении этого?