Erlang信息传递环形基准测试

    目的是用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毫秒.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值