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

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

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

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

4 ответов

17 просмотров

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> для того, чтобы лимит изменить. Расскажи потом про успехи на собесе :)

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта