2012-07-24 61 views
6

我應該更喜歡:二郎:START_TIMER/3比定時器:send_after/3

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

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

如果我的使用情況是發送單個原子消息到gen_server?我期望有成千上萬的gen_servers,並且每一個都需要有一個關聯的TTL計時器事件。

回答

20

Common Caveats section of the Erlang Efficiency Guide說:

使用erlang:send_after/3erlang:start_timer/3創建計時器比使用由timer模塊提供的定時器高效得多。 timer模塊使用單獨的進程來管理定時器,並且如果許多進程頻繁地創建和取消定時器(特別是在使用SMP模擬器時),則該進程可能很容易變得過載。

不管理定時器(例如timer:tc/3timer:sleep/1)的timer模塊中的功能不會調用定時器 - 服務器進程,因此無害。

+1

非常感謝效率指南的鏈接 – 2012-07-25 08:06:43

-2

因爲我不確信你的偏好是什麼,我會假設你是問哪一個是更快,當我有ñ過程:

不知道100%,我不認爲它會造成很大的差異。如果您擁有數百或數千個gen_server實例,我建議您花時間優化這些實例。如果您仍然需要在消息傳遞中追逐幾微秒,那麼您總是可以嘗試並分析分析以查看哪一個更快。

+0

這不是以任何方式回答這個問題 – 2017-01-25 09:39:52