Size: a a a

2020 March 10

V

Vasilii Demidenok in ErlangRus
ага, просто думаю что если можно избежать каждый раз бегать в блокирующий вызов на gen server я могу тоже самое сделать на ets
источник

ML

Maksim Lapshin in ErlangRus
Vasilii Demidenok
я пока вижу связку ets + gen_server, где для чтения не нужно ломиться в генсервер если уже кто-то взял лок на чтение
Тебе надо к ген серверу ломиться не за данными, а за локом
источник

V

Vasilii Demidenok in ErlangRus
через ets:update_counter/update_element
источник

ML

Maksim Lapshin in ErlangRus
Ну или сделай как у нас в гентрекере: читаешь из ets, пишешь через генсервер
источник

V

Vasilii Demidenok in ErlangRus
Maksim Lapshin
Тебе надо к ген серверу ломиться не за данными, а за локом
я за локом хочу минимально ломиться)
источник

DF

Denis Fakhrtdinov in ErlangRus
Писать лок можно коллом, читать из ets.
источник

DF

Denis Fakhrtdinov in ErlangRus
Но я не думаю, что легкий лок-сервер будет боттлнеком.
источник

V

Vasilii Demidenok in ErlangRus
ну надо тестить да.. не факт что моя идея с ets того действительно стоит..
источник

DF

Denis Fakhrtdinov in ErlangRus
Если лок действительно такой простой, прочитать и отдать стейт из генсервера может быть и быстрей, чем работать с ets.
источник

DF

Denis Fakhrtdinov in ErlangRus
Ну и там есть место оптимизациям, если отрезать всё ненужное.
источник

V

Vasilii Demidenok in ErlangRus
сам ресурс не обычный эрланговый терм, он мутабельный. поэтому писать в один а читать чисто из ets не выйдет
источник

V

Vasilii Demidenok in ErlangRus
т.е. надо именно гарантии что когда кто-то в него пишет чтения не происходит.
источник

AK

Aleksey Kluchnikov in ErlangRus
Итого нужен процес, генсервер или не генсервер. К которому нужны три апишки, lock, unlock и check. + плюс отработка крешей через линковку. И ets к нему.
источник

AK

Aleksey Kluchnikov in ErlangRus
строчек на 100 кода задачище
источник

V

Vasilii Demidenok in ErlangRus
Denis Fakhrtdinov
Если лок действительно такой простой, прочитать и отдать стейт из генсервера может быть и быстрей, чем работать с ets.
честно говоря от ets:update_elem я ожидаю меньшего оверхеда чем gen_server:call. оригинальная идея была в том, что ходить в блокирующем виде только когда мы переключаемся из read в write
источник

V

Vasilii Demidenok in ErlangRus
Aleksey Kluchnikov
Итого нужен процес, генсервер или не генсервер. К которому нужны три апишки, lock, unlock и check. + плюс отработка крешей через линковку. И ets к нему.
если ты пролистаешь сообщения выше, ты увидишь что я просил не предлагать gen_server посольку это и так самое очевидное что можно сделать.
источник

AK

Aleksey Kluchnikov in ErlangRus
по другому никак
источник

DF

Denis Fakhrtdinov in ErlangRus
Почему бы не сделать очевидного?..
источник

DF

Denis Fakhrtdinov in ErlangRus
Зачем городить что-то ещё.
источник

СИ

Сергей Иванов in ErlangRus
Vasilii Demidenok
если ты пролистаешь сообщения выше, ты увидишь что я просил не предлагать gen_server посольку это и так самое очевидное что можно сделать.
Обсервер
источник