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毫秒.
%文件名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毫秒.
相关文章推荐
- Erlang 环形基准测试
- erlang 程序设计 习题:环形基准测试
- axis1.4部署webService 读取和响应Header信息\传送文件\BasicHandler\ SimpleChain\传递对象集合等测试
- NOIP2015提高组T2 洛谷P2661 信息传递
- 管理员必知:服务器基准测试方法与误区
- 性能基准测试是虚拟化普及的最后瓶颈
- CI框架源码阅读笔记5 基准测试 BenchMark.php
- MySQL公司宣布基于SCI-Cluster数据库基准测试结果
- 安卓基础总结 intent activity 页面间传递信息
- 第七周项目一 顺序环形队列算法库的建立及测试
- erlang 200w进程测试
- 关于information Passing(信息传递)
- 解决“chrome正受到自动测试软件的控制”信息栏显示问题
- 测试连接失败,因为初始化提供程序试发生错误。发生了一个ORACLE错误,但无法从ORACLE中检索错误信息
- Dubbo Filter的实践——向Dubbo服务传递上下文环境信息
- ROS中测试机器人里程计信息
- Android开发浅谈-04-Activity信息传递
- 利用模板传递完整数组信息
- erl_0019《硝烟中的erlang》 读书笔记005 “进程信息"
- Distributed System: Message (信息传递) and JMI