Скажем, у меня есть большое количество заданий (десятки или сотни), которые нужно выполнять, но они требуют значительных ресурсов процессора и только несколько из них могут быть запущены одновременно. Есть ли простой способ запустить X
работу сразу и начать новую после ее завершения? Единственное, что я могу придумать, это что-то вроде ниже (псевдокод):
jobs=(...);
MAX_JOBS=4;
cur_jobs=0;
pids=(); # hash/associative array
while (jobs); do
while (cur_jobs < MAX_JOBS); do
pop and spawn job and store PID and anything else needed;
cur_jobs++;
done
sleep 5;
for each PID:
if no longer active; then
remove PID;
cur_jobs--;
done
Я чувствую, что слишком усложняю решение, как я часто это делаю. Целевой системой является FreeBSD, если может быть какой-то порт, который выполняет всю тяжелую работу, но предпочтительным является универсальное решение или общая идиома.
make -f 4
4 параллельных задания.