Concurrency erlang中并发循环时间的测量

Concurrency erlang中并发循环时间的测量,concurrency,erlang,Concurrency,Erlang,我在erlang中创建了一轮进程,并希望测量第一条消息通过网络和整个消息系列所花费的时间,每次第一个节点返回消息时,它都会发送另一条消息。 现在在第一个节点中,我有以下代码: receive stop-> io:format("all processes stopped!~n"), true; start-> statistics(runtime), Son!{number, 1}, msg(PID, Son, M, 1); {_, M

我在erlang中创建了一轮进程,并希望测量第一条消息通过网络和整个消息系列所花费的时间,每次第一个节点返回消息时,它都会发送另一条消息。 现在在第一个节点中,我有以下代码:

    receive
stop->
    io:format("all processes stopped!~n"),
    true;
start->
    statistics(runtime),
    Son!{number, 1},
    msg(PID, Son, M, 1);
{_, M} ->
    {Time1, _} = statistics(runtime),
    io:format("The last message has arrived after ~p! ~n",[Time1*1000]),
    Son!stop;
当然,我会在发送第一条消息时开始统计。 正如您所看到的,我在第一个消息循环中使用了自上次调用以来的时间,并希望在整个运行中使用总运行时间,问题是,自从我第一次开始统计以来,总运行时间是累积的。 我想到的第二个想法是使用另一个进程,它有两个接收循环,获取每个循环的时间,添加它们并打印,但我相信erlang可以做得更好。
我想解决这个问题的最佳方法是以某种方式刷新总运行时间,但我找不到如何做到这一点。有没有办法解决这个问题

测量往返时间的一种方法是随每条消息发送一个时间戳。当第一个节点收到消息时,它可以测量往返时间,计算
Total\u Run\u time-Timestamp

为了计算总运行时间,我将记住进程状态(或字典)中的第一个时间戳,并在停止测试时计算总运行时间

此外,考虑到您提到的网络,您是否确定CPU时间(即统计(运行时)计算的时间)是您所追求的?也许,挂钟时间更合适