Size: a a a

2019 November 11

СИ

Сергей Иванов in ErlangRus
Mike Wazowski
Там же ets внутри. Куда уж быстрей...
да, erts  и get_key и get_env.. Спасибо!
источник

VS

Vladimir Sekisov in ErlangRus
persistent_term побыстрее, чем ets будет,
у меня процентов 20 давал на тестах
источник

c🦊

cleverfox 🦊 in ErlangRus
Сергей Иванов
вопрос по поводу оптимизации - вот если app.src очень большой, и там есть некий param значение которого нужно опрашивать очень часто и во многих местах
application:get_env(param)  - erlang умеет это оптимизировать если нет, то есть ли способ ускорить это не наворачивая везде код по передаче вычисленного значения? там ведь надеюсь не перебор листа
Там env в ets хранится с ключем {appname, param}. Если значение param большое - копирования будет много
источник

СИ

Сергей Иванов in ErlangRus
Vladimir Sekisov
persistent_term побыстрее, чем ets будет,
у меня процентов 20 давал на тестах
спасибо за наводку! вообще мимо меня этот модуль прошел.
источник

СИ

Сергей Иванов in ErlangRus
cleverfox 🦊
Там env в ets хранится с ключем {appname, param}. Если значение param большое - копирования будет много
небольшой, в данном случае - просто атом
источник

c🦊

cleverfox 🦊 in ErlangRus
Тогда не беспокойся.
источник

СИ

Сергей Иванов in ErlangRus
cleverfox 🦊
Тогда не беспокойся.
persistent_term аккурат для этой штуки заточен (чуть более громоздкой обвязки требует чем над application:get_env)
источник

SP

Sergey Prokhorov in ErlangRus
странно что в persistent term не добавили batch update
источник

MW

Mike Wazowski in ErlangRus
Раз уж речь про конфиги зашла, спрошу чтоб два раза не вставать.
В проекте, доставшемся мне по наследству, предыдущие авторы для кофигов на старте системы генерировали динамически модуль, тут же его в памяти компилировали и через него узнавали все конфиги. Внутри одна единственная функция с кучей clause — по одному на каждый ключ конфига.
Конфиги и по количеству ключей, и по размеру значений смешные.
Я голову сломал: не могу придумать ничего, кроме возможно мифических микросекунд экономии, в которой особой необходимости не видно, но ведь люди заморочились, время потратили, значит, была причина какая-то...
Кто-то может меня просветить, зачем такое может быть нужно?
источник

СИ

Сергей Иванов in ErlangRus
Sergey Prokhorov
странно что в persistent term не добавили batch update
а поясни на примере, не понял
источник

V

Vasilii Demidenok in ErlangRus
@zephyrean атомарное обновление сразу всего конфига?
источник

СИ

Сергей Иванов in ErlangRus
Vasilii Demidenok
@zephyrean атомарное обновление сразу всего конфига?
а для этого недостаточно было параметра {config, {....}}?
источник

MW

Mike Wazowski in ErlangRus
Vasilii Demidenok
@zephyrean атомарное обновление сразу всего конфига?
В системе в принципе обновления конфига не предусмотрено изначально архитектурно
источник

В

Вертолетчик in ErlangRus
Sergey Prokhorov
странно что в persistent term не добавили batch update
По идее тогда будет слишком много работы для gc
источник

ВИ

Виталий Иванов in ErlangRus
Mike Wazowski
Раз уж речь про конфиги зашла, спрошу чтоб два раза не вставать.
В проекте, доставшемся мне по наследству, предыдущие авторы для кофигов на старте системы генерировали динамически модуль, тут же его в памяти компилировали и через него узнавали все конфиги. Внутри одна единственная функция с кучей clause — по одному на каждый ключ конфига.
Конфиги и по количеству ключей, и по размеру значений смешные.
Я голову сломал: не могу придумать ничего, кроме возможно мифических микросекунд экономии, в которой особой необходимости не видно, но ведь люди заморочились, время потратили, значит, была причина какая-то...
Кто-то может меня просветить, зачем такое может быть нужно?
До появления persistent_term - это самый быстрый с точки зрения получения значения способ, да и сейчас тоже.
У нас до сих пор так.
источник

SP

Sergey Prokhorov in ErlangRus
Сергей Иванов
а поясни на примере, не понял
persistent term требует gc всех процессов при обновлении. Единственная функция дляобновления там это persistent_term:put/2 которая даёт обновить один ключ за раз. Если мне нужно сразу обновить 100 ключей у меня 100 раз дёрнется full GC?
источник

СИ

Сергей Иванов in ErlangRus
Sergey Prokhorov
persistent term требует gc всех процессов при обновлении. Единственная функция дляобновления там это persistent_term:put/2 которая даёт обновить один ключ за раз. Если мне нужно сразу обновить 100 ключей у меня 100 раз дёрнется full GC?
понял
источник

MW

Mike Wazowski in ErlangRus
Виталий Иванов
До появления persistent_term - это самый быстрый с точки зрения получения значения способ, да и сейчас тоже.
У нас до сих пор так.
А вы замеряли реальную разницу? И какой у вас rps к этим конфигам?
источник

ВИ

Виталий Иванов in ErlangRus
Замерял, даже может результаты есть если поискать.
источник

СИ

Сергей Иванов in ErlangRus
Mike Wazowski
А вы замеряли реальную разницу? И какой у вас rps к этим конфигам?
20% выше  писал товарищ. правда каких единиц не знаю, но если совт работает годами, то в годах )
источник