Это online problem
. Поскольку вы заранее не знаете, сколько потребуется обработки для каждого источника, вы не сможете добиться идеальной балансировки.
Я не уверен на 100%, что именно вы называете своим решением, поэтому мои следующие несколько строки могут быть дублированием того, что вы уже сказали:
В некоторой структуре данных я бы держал отображение источника / процесса, где я также сохранял бы количество текущих заданий, ожидающих этого процесса (от все источники).
Когда появляется новый источник, я назначаю его процессу, который имеет наименьшую нагрузку.
В тяжелых случаях (например, активными остаются только три источника, и все три находятся в том же процессе), я бы поставил в очередь входящие задания (временно), и когда процесс завершил обработку заданий, которые уже находятся в его очереди, я бы перераспределил сопоставление источника / процесса.
Надеюсь, что это делает смысл и полезно.