Size: a a a

2020 July 23

A

Andrey in ErlangRus
Aleksey Kluchnikov
Тоесть если мне 10таймеров надо то они породят *10 процессов
да 10 спавнов
источник

EK

Evgeny Khramtsov in ErlangRus
Aleksey Kluchnikov
Тоесть если мне 10таймеров надо то они породят *10 процессов
нет, start_timer не порождает процесс, не путать с timer:*
источник

A

Andrey in ErlangRus
я про timer:
источник

EK

Evgeny Khramtsov in ErlangRus
ну в gen_statem нету timer:*
источник

AK

Aleksey Kluchnikov in ErlangRus
Evgeny Khramtsov
нет, start_timer не порождает процесс, не путать с timer:*
А как же он устроен?
источник

EK

Evgeny Khramtsov in ErlangRus
в общем ладно, я по диагонали читаю, сорря
источник

EK

Evgeny Khramtsov in ErlangRus
Aleksey Kluchnikov
А как же он устроен?
ну через timer_wheel
источник

DF

Denis Fakhrtdinov in ErlangRus
Как раз в timer: используется синглтон процесс, который менеджит все таймеры, поэтому он и является боттлнеком.
источник

DF

Denis Fakhrtdinov in ErlangRus
В efficiency guide черным по белому написано же:
> The timer module uses a separate process to manage the timers. That process can easily become overloaded if many processes create and cancel timers frequently (especially when using the SMP emulator).
источник

s

serkus in ErlangRus
Иванов Иванов
а какая еще?
имутабильность  данных))) для меня это  +++
источник

V

Vasilii Demidenok in ErlangRus
Evgeny Khramtsov
да, там таймеры убого сделаны, и под нагрузкой в профилировщике это видно
а поконкретнее можно?
источник

A

Andrey in ErlangRus
Denis Fakhrtdinov
Как раз в timer: используется синглтон процесс, который менеджит все таймеры, поэтому он и является боттлнеком.
я так понимаю ботлнек только на старт таймеров?
источник

DF

Denis Fakhrtdinov in ErlangRus
И start и cancel и срабатывание.
источник

EK

Evgeny Khramtsov in ErlangRus
Vasilii Demidenok
а поконкретнее можно?
ну там честные таймеры, а не через receive -> after
источник

V

Vasilii Demidenok in ErlangRus
Evgeny Khramtsov
ну там честные таймеры, а не через receive -> after
их много порождается или в чем конкретно проблема под нагрузкой?
источник

A

Andrey in ErlangRus
timer_timeout(SysTime) ->
   case ets:first(?TIMER_TAB) of
 '$end_of_table' ->
     infinity;
 {Time, _Ref} when Time > SysTime ->
     Timeout = (Time - SysTime + 999) div 1000,
     %% Returned timeout must fit in a small int
     erlang:min(Timeout, ?MAX_TIMEOUT);
 Key ->
     case ets:lookup(?TIMER_TAB, Key) of
   [{Key, timeout, MFA}] ->
       ets:delete(?TIMER_TAB,Key),
       do_apply(MFA),
       timer_timeout(SysTime);
   [{{Time, Ref}, Repeat = {repeat, Interv, To}, MFA}] ->
       ets:delete(?TIMER_TAB,Key),
       NewTime = Time + Interv,
       %% Update the interval entry (last in table)
       ets:insert(?INTERVAL_TAB,{{interval,Ref},{NewTime,Ref},To}),
       do_apply(MFA),
       ets:insert(?TIMER_TAB, {{NewTime, Ref}, Repeat, MFA}),
       timer_timeout(SysTime)
     end
   end.
источник

V

Vasilii Demidenok in ErlangRus
receive after мне казалось внутри то же будет использовать timer_weel, для after секции. В чем тогда проблема gen_statema?
источник

A

Andrey in ErlangRus
вот кста не по теме, но наболело. Почему в исходниках OTP такая дичь между пробелами и табуляцией?
источник

DF

Denis Fakhrtdinov in ErlangRus
Табы для индентации, пробелы для выравнивания?..
источник

EK

Evgeny Khramtsov in ErlangRus
Vasilii Demidenok
receive after мне казалось внутри то же будет использовать timer_weel, для after секции. В чем тогда проблема gen_statema?
вроде там не timer_wheel, хотя хз. В любом случае надо сообщение создавать и пихать его в очередь процесса
источник