Можно сделать и в 1 потоке через очереди и асинхронность. Имеем N массивов A1.. AN, стартуем для них в цикле для каждого свой
eachSeries, примерно так:
async.eachSeries(A1, function(item, cb) {
// сюда приходит item, когда с ним покончено, то делаем cb()
}, function() {
// все готово
});
Для каждого массива пока предыдущий элемент не отработает (не вернет управление через callback), то следующий не начнет обрабатываться. Если хочется использовать много процессоров, то разделяете задачу на части и запускаете при помощи
cluster много процессов, передаявя каждому свою часть работы через переменные окружения или
IPC: worker.send.