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

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

不知道我对这个题目的理解是不是正确的,建立一个进程,而后再这个进程中再建立一个,总共建立N个,造成一个环,只须要向Head进程发送一条消息,消息就能够沿着进程环传递直到最后一个进程。测试

下面是代码:spa

-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循环的代码:code

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

 

仅供参考,但愿能看到更好的答案。orm

相关文章
相关标签/搜索