私は何を好むべきですか:
erlang:start_timer(Ttl, self(), time_to_die)
また
timer:send_after(Ttl, self(), {timeout, time_to_die})
私のユースケースが単一のアトムメッセージをgen_serverに送信することである場合? 何十万もの gen_servers があると予想され、それらのそれぞれに TTL タイマー イベントが関連付けられている必要があります。
私は何を好むべきですか:
erlang:start_timer(Ttl, self(), time_to_die)
また
timer:send_after(Ttl, self(), {timeout, time_to_die})
私のユースケースが単一のアトムメッセージをgen_serverに送信することである場合? 何十万もの gen_servers があると予想され、それらのそれぞれに TTL タイマー イベントが関連付けられている必要があります。
Erlang効率ガイドの一般的な警告セクションには次のように書かれています。
erlang:send_after/3
を使用してタイマーを作成することは、モジュールerlang:start_timer/3
によって提供されるタイマーを使用するよりもはるかに効率的です。timer
モジュールは別のtimer
プロセスを使用してタイマーを管理します。多くのプロセスがタイマーを頻繁に作成およびキャンセルすると(特にSMPエミュレーターを使用する場合)、そのプロセスは簡単に過負荷になる可能性があります。
timer
タイマーを管理しないモジュール内の関数(timer:tc/3
またはなどtimer:sleep/1
)は、タイマーサーバープロセスを呼び出さないため、無害です。