Erlang中准确的时钟

bud*_*rot 7 erlang

我在考虑如何实现一个过程,该过程给出了自启动以来发生的离散时间间隔的数量.我在这里失去了准确性吗?一段时间后以及在滥用客户端之后,我如何实现这一目标而不会失去准确性.我有点难过在Erlang中如何做到这一点.

当然我不想使用系统调用,如now().

-module(clock).
-compile([export_all]).

start(Time) ->
    register(clock, spawn(fun() -> tick(Time, 0) end)).

stop() -> clock ! stop.

tick(Time, Count) ->
    receive
        nticks ->
            io:format("~p ticks have passed since start~n", [Count])
    after 0 -> true
    end,
    receive
        stop ->
            void
    after Time ->
            tick(Time, Count + 1)
    end.
Run Code Online (Sandbox Code Playgroud)

rye*_*guy 10

由于轻微的调度波动以及功能执行开销,您正在进行的手动计时计数并不准确.

你想要做的是在进程启动时获取时间戳,并将其传递给每个递归调用函数.然后,当您想要获取自启动过程以来已经过的滴答数(以微秒为单位)时,请获取新的时间戳并将它们都传递到now_diff.

看起来你正在使用自己的"滴答"概念,所以你可以弄清楚你的"滴答"是多少微秒,并用它来划分你的最终结果.