Re[7]: Go vs Erlang vs Elixir
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 09.02.17 18:01
Оценка:
Здравствуйте, neFormal, Вы писали:

N>>Ну мне сложно подобрать иной термин, как "убийство проекта", для того, что мне пришлось выкинуть Erlang-версию и срочно перегнать приблуду (специализированный прокси) на C++.

N>>Появился гимор с управлением памятью, зато исчез — с неуправляемыми заклинами всего приложения под нагрузкой.
F>это до следующего уровня нагрузки.
F>дропать сообщеньки надо. ну, если нет больших проблем с постановкой сообщенек самому себе, тогда совсем всё плохо.

Специфика — я не имею право ничего дропать. Могу разве что убить соединение целиком. Но после реконнекта пойдёт всё заново литься, с наверняка тем же результатом.

N>>>>Лев Валкин (lionet@), например, строил демпферы на точках передачи между нодами, оповещая их о состоянии приёмных процессов. У него целый фреймворк был для этого.

F>>>ага, дистрибушон — слабое место.
N>>Там был не то чтобы distribution...
F>а зачем тогда? выравнивал нагрузку между нодами?

Просто регулировал, чтобы они не умерли. А так — я уже очень плохо помню, но были фронтэнды и разные бэкэнды.

N>>Не значит, но факт тот, что там отдельные кучи у каждого процесса.

F>да как бы и нет. если нужна память, процесс её берёт у VM, которая берёт её у системы.
F>память берётся чанками и освобождается в паре ситуаций.

Да. Включая full GC.

F>>>просто при передаче управления они выкидывают уже ненужное. и "общая куча" при этом тоже имеет возможность избавиться от лишнего.

N>>Нет. GC срабатывает в каждом процессе отдельно и по превышению им количества так называемых reductions с прошлого старта GC. Reduction — это, грубо говоря, любая элементарная операция интерпретатора (один оператор выражения, один вызов функции, один простой матчинг-биндинг и т.п.) В последних релизах разделены поколения и полная сборка, но по-прежнему по процессам раздельно. Читайте начиная с process_flag(fullsweep_after).

F>да что-то ни разу не так.

F>память чистится либо при завершении процесса, либо с hibernate из gen_server'а.

Или на ходу работы. Я не знаю, как ты этого не видишь, можно элементарным образом показать.

Может, у тебя были просто короткоживущие процессы. У меня в нескольких крайне важных случаях был пул долгоживущих.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.