erlang:start_timer / 3 vs timer:send_after / 3

时间:2012-07-24 07:37:11

标签: erlang

我应该更喜欢什么:

erlang:start_timer(Ttl, self(), time_to_die)

timer:send_after(Ttl, self(), {timeout, time_to_die})

如果我的用例是将单个原子消息发送到gen_server?我希望有成千上万的gen_servers,其中每一个都需要有一个相关的TTL计时器事件。

1 个答案:

答案 0 :(得分:20)

Common Caveats section of the Erlang Efficiency Guide说:

  

使用erlang:send_after/3erlang:start_timer/3创建计时器比使用timer模块提供的计时器更有效。 timer模块使用单独的进程来管理计时器,如果许多进程经常创建和取消计时器(特别是在使用SMP模拟器时),该进程很容易变得过载。

     

timer模块中不管理计时器(例如timer:tc/3timer:sleep/1)的函数不会调用计时器服务器进程,因此无害。