erlang 程序设计 习题:环形基准测试

编写一个环形基准测试。在一个环中创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息,在N和M的不同取值下测试整个过程会消耗多长时间。

不知道我对这个题目的理解是否是正确的,创建一个进程,然后再这个进程中再创建一个,总共创建N个,形成一个环,只需要向Head进程发送一条消息,消息就可以沿着进程环传递直到最后一个进程。

下面是代码:

-module(circle_process).
-import(lib_misc,[for/3]).
-compile(export_all).

start(Num) ->
    register(circle_head, spawn(fun() -> create(Num)end)).


send_message(M, N) ->
    lib_misc:for(0, N, fun(I) -> circle_head ! M end).

create(0) ->
    self();
create(Num) ->
    Pid = spawn(fun() -> create(Num - 1) end),
    io:format("self Pid:~p create process:~p~n", [self(), Pid]),
    loop(Pid).

loop(Pid) ->
    receive
        cancel ->
            Pid ! cancel,
            cancel;
        Any ->
            Pid ! Any,
            io:format("Pid:~p receive:~p~n", [self(), Any]),
            loop(Pid)
    end.

lib_misc中for循环的代码:

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

 

仅供参考,希望能看到更好的答案。

posted @ 2014-04-17 12:58  猪笨无罪  阅读(431)  评论(0编辑  收藏  举报