#erlang
#erlang
Вопрос:
например, у меня есть программа, которая потребляет много процессора. Я создаю плагин C, который может взаимодействовать с erlang. Я создаю 16 потоков с SMP 16. Даст ли это мне аналогичную производительность по сравнению с чем-то вроде pthreads на многоядерном? Потокам не нужно взаимодействовать друг с другом.
Ответ №1:
«Плагин C» четко не определен в контексте erlang.
Либо вы пишете порт, который в основном разветвляет системный процесс.
Или вы пишете связанный драйвер, который запускается в том же контексте, что и виртуальная машина Erlang.
В обоих случаях вы можете воспользоваться преимуществами многоядерных процессоров. В первом случае просто зависит от ОС для размещения процессов ОС на разных процессорах (на что должна быть способна любая приличная SMP-ОС).
Во втором случае я не так уверен, но я бы ожидал, что драйверы также будут работать на разных ядрах процессора. Если у вас нет веских причин для использования связанных драйверов, и вы точно знаете, что делаете, я не рекомендую использовать их по соображениям сложности и стабильности. В случае сбоя порта Erlang получает уведомление и может перезапустить его или принять другие меры предосторожности. При сбое драйвера вся виртуальная машина Erlang будет жестко отключена.
Главный вопрос заключается в том, какую часть проблемы вы хотите решить в Erlang, если вы используете erlang только для запуска ваших «плагинов», это может быть намного проще решить, просто запустив процессы из оболочки, поскольку вашим «потокам» не нужно обмениваться данными, почему бы не передать параметры в командной строке и разветвить рабочие процессы из сценария оболочки?
Комментарии:
1. Вы также можете писать NIF.