我应该更喜欢什么:
erlang:start_timer(Ttl, self(), time_to_die)
或
timer:send_after(Ttl, self(), {timeout, time_to_die})
如果我的用例是将单个原子消息发送到gen_server?我希望有成千上万的gen_servers,其中每一个都需要有一个相关的TTL计时器事件。
答案 0 :(得分:20)
Common Caveats section of the Erlang Efficiency Guide说:
使用
erlang:send_after/3
和erlang:start_timer/3
创建计时器比使用timer
模块提供的计时器更有效。timer
模块使用单独的进程来管理计时器,如果许多进程经常创建和取消计时器(特别是在使用SMP模拟器时),该进程很容易变得过载。
timer
模块中不管理计时器(例如timer:tc/3
或timer:sleep/1
)的函数不会调用计时器服务器进程,因此无害。