gpt4 book ai didi

erlang - Erlang中的准确时钟

转载 作者:行者123 更新时间:2023-12-04 11:15:41 24 4
gpt4 key购买 nike

我在考虑如何实现一个过程,该过程给出自开始以来发生的离散时间间隔的数量。
我在这里失去准确性吗?在经过一段时间和大量客户端滥用之后,我如何在不损失准确性的情况下实现这一点。我有点难住如何在 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.

最佳答案

由于轻微的调度波动以及函数执行开销,像您所做的手动滴答计数不会准确。

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

看起来您正在使用自己的“滴答”概念,因此您可以计算出您的“滴答”是多少微秒并将最终结果除以它。

关于erlang - Erlang中的准确时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4539452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com