6

我应该更喜欢什么:

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

或者

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

如果我的用例是将单个原子消息发送到 gen_server?我预计会有数十万个 gen_servers,其中每一个都需要有一个关联的 TTL 计时器事件。

4

1 回答 1

20

Erlang Efficiency Guide的Common Caveats 部分说:

erlang:send_after/3使用和创建定时器比使用模块erlang:start_timer/3提供的定时器更有效。timertimer模块使用单独的进程来管理计时器,如果许多进程频繁创建和取消计时器(尤其是在使用 SMP 仿真器时),该进程很容易过载。

timer模块中不管理定时器的函数(如timer:tc/3or timer:sleep/1),不调用 timer-server 进程,因此是无害的。

于 2012-07-24T11:17:51.817 回答