Нет реального способа ограничить размеры очередей процесса, кроме как своевременно обрабатывать их все. Лучшим способом было бы просто проверить доступные ресурсы перед порождением и подождать, если их будет недостаточно. Так что, если вы беспокоитесь о памяти, проверьте память, прежде чем создавать новый процесс. если дисковое пространство, проверьте дисковое пространство, т. д.
Также возможно ограничение количества порождаемых процессов. Простая конструкция будет:
pool(Max) ->
process_flag(trap_exit, true),
pool(0, Max);
pool(Current, Max) ->
receive
{'EXIT', _, _} ->
pool(Current - 1, Max);
{ work, F, Pid} when Current < Max ->
Pid ! accepted,
spawn_link(F),
pool(Current + 1, Max);
{ work, _, Pid} ->
Pid ! rejected,
pool(Current, Max);
end.
Это грубый набросок того, как процесс будет ограничивать количество процессов, которые он порождает. Однако считается, что лучше ограничивать реальные причины, а не искусственные числа.