Следующий пример кода из программирования Erlang книги Джо Армстронг:Erlang используя для() против списков: Еогеасп
max(N) ->
Max = erlang:system_info(process_list),
io:format("Maximum allowed processes:~p~n",[Max]),
statistics(runtime),
statistics(wall_clock),
L = for(1, N, fun() -> spawn(fun() -> wait() end) end),
{_, Time1} = statistics(runtime),
{_, Time2} = statistics(wall_clock),
lists:foreach(fun(Pid) -> Pid ! die end, L),
U1 = Time1 * 1000/N,
U2 = Time2 * 1000/N,
io:format("Process spawn time=~p (~p) microseconds~n",
[U1, U2]).
Мой вопрос имеет дело с основами Эрланга. Похоже, что Джо использовал for()
для процессов порождения, а затем lists:foreach
, чтобы умереть. Есть ли причина использовать один над другим? Почему бы не использовать for() снова для перебора списка порожденных процессов и отправки им сообщения о смерти? Есть ли оптимизация эффективности здесь, что мне не хватает?
Кроме того, 'for/3' не существует в языке, поэтому вам придется реализовать его самостоятельно. Делает это спорным вопросом. –