Timer erlang中的高分辨率定时器

Timer erlang中的高分辨率定时器,timer,erlang,Timer,Erlang,有人知道是否可以在Erlang中制作高分辨率计时器吗? 根据文件记录,所有计时器和超时均以毫秒为单位进行测量。 需要以微秒为单位进行延迟。例如,而不是 计时器:在(毫秒、模块、函数、参数)之后应用。\ 类似于 定时器:在(微秒、模块、函数、参数)之后应用。实际上,所有定时器和超时原语都以毫秒为单位,包括: 接收after原语(这是模块最终所依赖的) 依靠同一机制, 用于链接到驱动程序的函数 可以考虑两种方法来实现亚毫秒计时器: 使用Erlang原语等待被截断的毫秒数,然后使用繁忙循环进行调


有人知道是否可以在Erlang中制作高分辨率计时器吗?
根据文件记录,所有计时器和超时均以毫秒为单位进行测量。
需要以微秒为单位进行延迟。例如,而不是
计时器:在(毫秒、模块、函数、参数)之后应用。\

类似于

定时器:在(微秒、模块、函数、参数)之后应用。

实际上,所有定时器和超时原语都以毫秒为单位,包括:

  • 接收
    after
    原语(这是模块最终所依赖的)
  • 依靠同一机制,
  • 用于链接到驱动程序的函数
可以考虑两种方法来实现亚毫秒计时器:

  • 使用Erlang原语等待被截断的毫秒数,然后使用繁忙循环进行调整。请注意,这不是一个实时函数,因为它保证是单调的(这是相当昂贵的)。你应该使用
  • 编写生成线程的本机代码,该线程将在计时器触发时发送消息。这可以很容易地作为NIF实现
  • 在实践中,如果需要计时器,应该使用eralang:send\u after/3或erlang:start\u timer/3,而不是计时器模块。定时器模块使用定时器进程来 实现计时器,如果应用程序的计时器太多,它将阻止计时器进程,从而使应用程序变慢
  • erlang:send_after/3和erlang:start_timer/3有一个区别。
    • erlang:start_timer/3将在时间毫秒后向Dest发送消息{timeout,TimerRef,Msg}。erlang:send_after/3将在时间毫秒后将消息发送到Dest
    • 问题是当您需要取消计时器,并且消息已发送时,如果在/3之后使用erlang:send\u,可能会导致逻辑句柄问题