У меня есть программа, которую я создаю (на С#), и я вижу два подхода.
1) Диспетчер заданий, который ожидает завершения любого количества потоков X, по завершении он получает следующий кусок работы, создает новый поток и отдает ему этот кусок.
or
2) Мы создаем X потоков для запуска, даем каждому из них часть работы, и когда поток завершает работу, он запрашивает у менеджера заданий дополнительную работу. Если больше нет работы, он спит, а затем снова спрашивает, при этом сон становится все длиннее.
Эта программа будет запущена и завершена, хотя я вижу, что она превращается в службу, которая постоянно ищет новые рабочие места.
Каждый фрагмент будет состоять из ряда идентификаторов данных, вызова базы данных для получения некоторой информации или выполнения операции с идентификатором данных, а затем записи в базу данных информации об идентификаторе данных.