您的位置:首页 > 其它

Erlang信息传递环形基准测试

2010-03-20 13:52 323 查看
目的是用Erlang语言首先创建一个含有N个进程的环, 然后沿着环发送一条消息M次, 测试在N和M取不同值时整个过程的耗时情况. 此有一例, 可参照看看. 我的代码如下:

%文件名exec.erl

-module(exec).
-compile(export_all).

for(N,N,F)->F(),[];
for(I,N,F)->F(),for(I+1,N,F).

start(N)->
create([self()],N-1).
create(PidList,0)->PidList;
create([H|T],N) when N>0->
create([spawn(fun()->loop(H) end),H|T],N-1).
loop(TargetPid)->
receive
cancel ->
cancel;
Any->
TargetPid ! Any,
%sleep(round(random:uniform()*10)),
loop(TargetPid)
end.

head_rec(0)->[];
head_rec(N)->
receive
Any->
%io:format("~p~n",[Any]),
head_rec(N-1)
end.

circle_test(M,N,Message)->
[H|T]=start(N),
for(1,M,fun()->H!Message end),
head_rec(M),
lists:map(fun(Pid)->Pid!cancel end, [H|T]),
testSucessful.

sleep(T)->
receive
after T ->
true
end.

然后在exec.erl所在目录下启动erlang shell, 如下:
1> c(exec.erl).
{ok,exec}
2> {Time,Value}=timer:tc(exec,circle_test,[1000,5000,"how are you"]).
{2625000,testSucessful}

测试成功, 耗时2625毫秒.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: