169 похожих чатов

Друзья, подскажите пожалуйста по процессам в эликсир. У нас же

запускается в ОС один процесс беам виртуальной машины? Или по одному процессу на одно ядро? Или один процесс с количеством тредов равным количеству ядер?
И внутри виртуальной машины: каждый отдельный процесс (например запущенный супервизор и три ген сервера) они же не пораждают в системе отдельный треды? Они крутятся только внутри вм и система их не видит как отдельные процессы и/или треды? То есть мы оперируем понятием процесса не на уровне ос, а абстракцией процесса внутри вм. Верно мыслю?

P.S. Готовлюсь к собесу, очень не хочу обосраться )

4 ответов

20 просмотров

http://www.unlimitednovelty.com/2009/01/cutting-edge-of-vm-design.html?m=1

> один процесс с количеством тредов равным количеству ядер Так

Ты верно мыслишь, но давай уточним некоторые моменты. 1. BEAM и процессы ОС: Да, при запуске приложения на Erlang или Elixir, виртуальная машина BEAM запускается как один процесс в операционной системе. 2. Потоки в BEAM: BEAM использует потоки для некоторых задач, таких как асинхронный ввод/вывод, но основное выполнение кода обычно происходит в одном потоке. В новых версиях Erlang/OTP BEAM может использовать несколько потоков для выполнения кода, соответствующих числу ядер вашего процессора, что делает его многозадачным на уровне ОС. Но это регулируется настройками. 3. Процессы в BEAM: Когда мы говорим о "процессах" в контексте Erlang или Elixir, мы обычно имеем в виду легковесные процессы BEAM, а не процессы ОС. Эти процессы очень дешевы по ресурсам и их можно создать миллионы. Они не связаны непосредственно с потоками или процессами ОС. 4. Треды и процессы: Процессы в BEAM действительно не порождают отдельные потоки или процессы на уровне ОС. Они полностью управляются и планируются BEAM. Таким образом, когда ты говоришь о процессах в Elixir, ты действительно имеешь в виду абстракцию, предоставляемую BEAM, а не реальные процессы или потоки ОС. Удачи на собеседовании! Если будут еще вопросы – обращайся!

В дополнение к ответу выше: observer помогает разобраться с тем, что происходит внутри проекта, включая деревья. из iex можно запустить как :observer.start() только нужно, чтобы erlang был собран с wx и был в наличии X-сервер (то есть на винде нужно будет дополнительно кое-что доставить). Скрин во вложении. Видно, что десять ядер обнаружила BEAM и запустила 10 планировщиков [1] и [2]. И что запущено 920 процессов (или 915… похоже на баг, но моет быть и фича) [3]. Про “миллионы процессов” - запустить их мжно, но существуют лимиты на максимальное количество процессов, по умолчанию (до OTP26 включительно) - 262144. Обычно больше не нужно даже на нагруженных проектах (потому что вряд ли там один инстанс обслуживает всех клиентов), но если нужно - всегда можно возпользоваться флагом -P <num> для того, чтобы лимит изменить. Расскажи потом про успехи на собесе :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта