Size: a a a

2019 December 18

AB

Alexey Bolshakov in pro.elixir
создать дохрена большое сообщение и отправить. такой себе кейс. на уровне видео выше, про анализ голанга. где мы сделали цикл непрерываемый и удивляемся, что он не прерывается.
источник

AB

Alexey Bolshakov in pro.elixir
full_sweep_after крутил. ставил эксперименты, было дело. если чистить кучу часто, то замедлится этот самый процесс. ведь ты чаще собираешь мусор. на сколько я могу предположить, в ерланг настроено так, что лучше потерять побольше памяти, чем потерять скорость.
источник

VS

Vladimir Sekisov in pro.elixir
Alexey Bolshakov
а по поводу пересылки больших сообщений - я тоже не знаю, что тут сказать. у меня таких проблем не было. тут надо как-то очень специально не верно проектировать архитектуру приложения
до OTP 22 приходилось кастомный протокол через  сокет делать
отдельно или partisan использовать.
Теперь ситуация должна улучшиться, но я еще не тестировал, не было пока
приложений с большими сообщениями
источник

Е

Евгений in pro.elixir
Alexey Bolshakov
а по поводу пересылки больших сообщений - я тоже не знаю, что тут сказать. у меня таких проблем не было. тут надо как-то очень специально не верно проектировать архитектуру приложения
ну пришел тебе жсон на мегабайт, ты его распарсил в мапу и передал дальше, вот и получается большое сообщение.
источник

Е

Евгений in pro.elixir
таки приходится иногда чесать репу чтобы избежать передачи больших сообщений.
источник

AB

Alexey Bolshakov in pro.elixir
Евгений
ну пришел тебе жсон на мегабайт, ты его распарсил в мапу и передал дальше, вот и получается большое сообщение.
если json большой, то это, как правило, список. и его вполне можно разбирать «лениво» через stream. я решал на хайлоад капе эту проблему как раз. даже если файл не разбит по строкам, то можно его кусками читать через File.stream и кусками же парсить. есть либа Jaxon у нее есть возможность работать через  stream. и там как раз всплесков по потреблению памяти уже избегаешь благодаря этому
источник

AB

Alexey Bolshakov in pro.elixir
можно как stream, а можно stream+flow
источник

Е

Евгений in pro.elixir
Alexey Bolshakov
если json большой, то это, как правило, список. и его вполне можно разбирать «лениво» через stream. я решал на хайлоад капе эту проблему как раз. даже если файл не разбит по строкам, то можно его кусками читать через File.stream и кусками же парсить. есть либа Jaxon у нее есть возможность работать через  stream. и там как раз всплесков по потреблению памяти уже избегаешь благодаря этому
я и говорю, что приходится иногда думать об этом.
источник

AP

Andrey Pavlov in pro.elixir
А есть языки где бы не пришлось думать об этом?
источник

AP

Andrey Pavlov in pro.elixir
Идеально бы было бы если бы вообще ни о чем  думать не надо, а язык всё сам делает
источник

Е

Евгений in pro.elixir
Andrey Pavlov
А есть языки где бы не пришлось думать об этом?
да, распарсил во внутреннюю структуру и передал указатель в другой поток, хоть гигабайт данных
источник

AP

Andrey Pavlov in pro.elixir
Обмазался критическим секциями...
источник

Е

Евгений in pro.elixir
Andrey Pavlov
Обмазался критическим секциями...
зачем, если данные иммутабельны?
источник

AP

Andrey Pavlov in pro.elixir
Ага, а если я хочу их менять?
источник

Е

Евгений in pro.elixir
Andrey Pavlov
Ага, а если я хочу их менять?
если хочешь, тогда либо копируй либо обмазывайся. :) но зачем мне менять распарсенный жсон? 😁
источник

Е

Евгений in pro.elixir
ну и ты, надеюсь понимаешь, что в BEAM тоже все обмазано, просто это сделал кто-то другой, вместо тебя :)
источник

AP

Andrey Pavlov in pro.elixir
Ну т.е. не всё так просто, да
источник

AP

Andrey Pavlov in pro.elixir
В бим я могу положить в ets и или даже в persistent term storage. И тоже избегать копирований
источник

Е

Евгений in pro.elixir
Andrey Pavlov
В бим я могу положить в ets и или даже в persistent term storage. И тоже избегать копирований
ets один хрен данные копируются, persistent term storage вроде недавно появился и это круто.
источник

AP

Andrey Pavlov in pro.elixir
Erlang -- Constructing and Matching Binaries
http://erlang.org/doc/efficiency_guide/binaryhandling.html
источник