Использование Erlang для порождения нескольких внешних процессов - PullRequest
1 голос
/ 15 января 2011

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

В качестве примера я использую rspec для записитесты на рубин.Скажем, у меня есть 10000 тестов, которые можно без проблем выполнить независимо.Имеет ли смысл использовать Erlang spawn 10000 rspecs и запускать каждый тест одновременно, а не rspec, выполняющий каждый последовательно?Или это просто смешная идея?

Ответы [ 2 ]

6 голосов
/ 15 января 2011

Вы путаете процессы erlang с процессами ОС.Erlang VM запускается в процессе ОС, интерпретирует и запускает программы erlang (скомпилированные в файлах лучей).Когда программа erlang вызывает spawn или spawn_link, виртуальная машина создает внутренний процесс, который будет запускаться внутренним планировщиком виртуальных машин.ОС ничего не знает об этих процессах.

Однако, когда программа erlang порождает порт (в вашем случае это обычный способ запуска внешних программ, таких как интерпретатор ruby), она создает новый процесс ОС, внешний по отношению к ВМ.,Этот внешний процесс связывается с ВМ, используя стандартный ввод-вывод.Если вы увидите процессы в вашей системе, вы заметите, что есть один процесс луча (erlang VM) и один процесс ruby.

Таким образом, запуск процессов ОС из erlang VM не будет иметь никакого значения по сравнению с запускомих любым другим способом (вручную, в сценарии оболочки и т. д.)

2 голосов
/ 15 января 2011

Я предполагаю, что rspecs - это тяжеловесные процессы, и в этом случае 10000 из них поставят любую ОС на колени, даже если они будут «обернуты» в процессы Erlang. Процессы Эрланга не являются подлинными процессами в смысле ОС, и они не могут наделить нормальные процессы ОС своими «магическими» свойствами. Они просто просят ОС порождать процесс.

...