最近在看《Erlang程序设计》这本书,学习中...
有个环形基准测试的练习,自己写的程序,如下
-module(looptest).
-export([start/3]).
%% PC : process count
%% MC : message count
%% Msg: message sent in the ring
start(PC, MC, Msg)
when is_integer(PC), is_integer(MC), PC >= 2, MC >= 1 ->
PidMaster = self(),
PidFirst = spawn(fun() -> firstLoop(MC, PidMaster) end),
PidLast = generate(PidFirst, MC, PC - 1),
statistics(runtime),
statistics(wall_clock),
PidFirst ! {start, PidLast, Msg},
receive
stopped ->
{_, T0} = statistics(runtime),
{_, T1} = statistics(wall_clock),
{runtime, T0, wall_clock, T1}
end.
generate(PidFirst, _MC, 0) ->
PidFirst;
generate(PidFirst, MC, PC) ->
PidNext = spawn(fun() -> loop(PidFirst, MC) end),
generate(PidNext, MC, PC - 1).
firstLoop(Counter, PidMaster) ->
receive
{start, PidNext, Msg} ->
PidNext ! Msg,
loop(PidNext, Counter),
PidMaster ! stopped
end.
loop(_PidNext, 0) ->
void;
loop(PidNext, Counter) ->
receive
Any ->
%% io:format("~p Received:~p~n", [self(), Any]),
PidNext ! Any,
loop(PidNext, Counter - 1)
end.
运行截图:
电脑配置: