Вы можете легко порождать процесс, как уже указывалось, и ваш процесс порождения может использовать monitor / 2 и счетчик для ограничения и поддержки пула рабочих процессов. Ваш процесс порождения будет порождать начальный набор процессов, отслеживая получающиеся Pids (то есть монитор (process, Pid)) и уменьшая счетчик по мере необходимости. Затем он переходит в receive в ожидании сообщения {'DOWN', MonitorRef, Type, Object, Info}, указывающего, что рабочий был завершен. Как в ...
loop(MaxProcesses, LiveProcesses) ->
receive
{'DOWN', _Ref, process, _Pid, _Info} ->
case LiveProcesses of
N when N =< MaxProcesses ->
spawn_another() %and monitor new pid
loop(MaxProcess, LiveProcesses);
N when N > MaxProcess ->
loop(MaxProcesses, LiveProcesses -1)
end
end
after %optional if you want the spawner to potentially do something else
Timeout->
do more work
loop(MaxProcesses, LiveProcesses)
end
end.