30 lines
770 B
Erlang
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)].
|