mat*_*ter 10 elixir erlang-otp eventemitter
在elixir中创建前景过程的最佳方法是什么,该过程在每个给定的时间内打勾?
我的主要问题是这样的方法:
defmoulde Ticker do
def tick do
do_something()
:timer.sleep(1000)
tick
end
end
Run Code Online (Sandbox Code Playgroud)
工作,但设计错了.它肯定不会每秒都在滴答作响,但是每秒都会增加do_something()的时间.我可以产生一个处理"某事"的过程,但仍有一个小的滞后.
此外,我正在尝试构建一个混合应用程序,有一些GenServers参与,以及一个主要的前台进程(我在这里问的那个)应该每隔x秒调用一次服务器.有这样的otp方式吗?
Paw*_*rok 16
我认为timer:apply_interval/4应该适合您的需求.使用这样的东西:
defmodule Tick do
def tick do
IO.inspect(:tick)
end
end
:timer.apply_interval(:timer.seconds(1), Tick, :tick, [])
Run Code Online (Sandbox Code Playgroud)
顺序中的参数是interval,模块名称,要调用的函数以及调用它的参数.然后你可以向你的GenServers内部发送消息.查看完整的文档:apply_interval/4
另一件需要考虑的事情是,如果你的tick函数只是向某些人发送简单的消息,GenServers那么它可能非常快,所以你的实现可能没问题,一旦被包装Task并插入监督树(如果你不关心潜在的轻微漂移是).
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |