sandbox/pe/processes.erl

30 lines
770 B
Erlang

-module(processes).
-export([max/1]).
%% max(N)
%%
%% Create N processes then destroy them
%% See how much time this takes
max(N) ->
Max = erlang:system_info(process_limit),
RealN = if N > Max -> Max; true -> N end,
io:format("Max allowed processes: ~p~n", [Max]),
statistics(runtime),
statistics(wall_clock),
L = for(1, RealN, fun() -> spawn(fun() -> wait() end) end),
{_, Time1} = statistics(runtime),
{_, Time2} = statistics(wall_clock),
lists:foreach(fun(Pid) -> Pid ! die end, L),
U1 = Time1 * 1000 / RealN,
U2 = Time2 * 1000 / RealN,
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)].