Commit chapter 12 stuff from last night.
This commit is contained in:
parent
d88b7f8bcf
commit
6b5d758311
|
@ -0,0 +1,32 @@
|
|||
-module(chapter12).
|
||||
-compile(exportall).
|
||||
-export([start/2, registrar/0]).
|
||||
|
||||
registrar(Client, {Name, Fun}) ->
|
||||
case whereis(Name) of
|
||||
undefined ->
|
||||
Pid = spawn(Fun),
|
||||
register(Name, Pid),
|
||||
Client ! {ok, Name, Pid};
|
||||
Pid -> Client ! {error, exists, Pid}
|
||||
end.
|
||||
|
||||
registrar() ->
|
||||
receive
|
||||
{Client, {Name, Fun}} ->
|
||||
registrar(Client, {Name, Fun}),
|
||||
registrar();
|
||||
X -> io:format("Spurious message ~w received~n", [X])
|
||||
end.
|
||||
|
||||
start(AnAtom, Fun) ->
|
||||
%% start the registrar if it's not been started.
|
||||
case whereis(registrar_proc) of
|
||||
undefined ->
|
||||
Pid = spawn(chapter12, registrar, []),
|
||||
register(registrar_proc, Pid);
|
||||
_ -> void
|
||||
end,
|
||||
registrar_proc ! {self(), {AnAtom, Fun}},
|
||||
receive X -> X end.
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
-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)].
|
Loading…
Reference in New Issue