Я вижу это так:
1. узнаем сколько строк в файле и запускаем в очередь по, например 10к на процесс, осталось решить 2 задачи:
1. оптимально узнать колво строк в файле
2. перемещение по файлу как через fseek но построчно...
Я бы сделал только ограничение на потолок параллельных процессов, например, 10. Сделал основной обработчик-распределитель (дёргает из файла определённый буфер данных и отправляет обработчику-парсеру). Сделал обработчик-парсер (обрабатывает переданный ему буфер данных). Распределитель создаёт количество обработчиков до указанного потолка, пока это требуется и по-порядку пихает им буферы