以下示例代码来自Joe Armstrong的Programming 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]).
Run Code Online (Sandbox Code Playgroud)
我的问题是处理Erlang的基本原理.看起来Joe过去常常for()会产生进程,然后lists:foreach就会死掉它们.是否有理由使用其中一个?为什么不再使用for()来迭代生成的进程列表并向它们发送消息?这里是否存在效率优化,我错过了?
lists:foreach为您省去了提前确定列表长度以及将其指定为参数的麻烦.该for调用需要知道过了多久做出的排行榜,所以这是必要的.for()当没有更合适的时候,它通常被用作最后的手段.
| 归档时间: |
|
| 查看次数: |
2000 次 |
| 最近记录: |