【发布时间】:2018-09-13 10:23:47
【问题描述】:
据我了解,Erlang 不具备执行 for 循环的能力。然而,在这段代码 sn-p 中,它使用了 for() 函数。我不太了解这个 for() 函数,因此需要任何帮助。
-module(helloworld).
-export([max/1,start/0]).
max(N) ->
Max = erlang:system_info(process_limit),
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]).
wait() ->
receive
die -> void
end.
for(N, N, F) -> [F()];
for(I, N, F) -> [F()|for(I+1, N, F)].
start()->
max(1000),
max(100000).
另外,Erlang 中的 run time 和 wall_clock 有什么区别?我相信挂钟是基于计算机时钟,而运行时是基于 Erlang 中的某种滴答声?我可能错了
【问题讨论】: