Erlang и C / C ++ Threading - PullRequest
       6

Erlang и C / C ++ Threading

3 голосов
/ 27 апреля 2011

Если я использую erlang, как, скажем, процесс spawner, он выполняет основные функции, которые не слишком критичны по скорости, такие как общение с сервером и обработка коммуникационных сообщений сервер-клиент.

Затем я выбираю порождать процессв erlang и запустить из него код c / c ++, сделает ли это мой код быстрее?

Будет ли erlang более эффективно обрабатывать многопоточность, чем эквивалент в c / c ++?

Если бы я породил многоc узлы из erlang, будут ли они на одном ядре или erlang будет обрабатывать многопоточность.Это главный вопрос, который меня интересует.

Ответы [ 2 ]

9 голосов
/ 27 апреля 2011

Вы говорите о двух разных концепциях в вашем вопросе: процессы Erlang, выполняющие код C / C ++ и узлы C.

Выполнение кода C или C ++ изнутри Erlang вообще не запланировано.Фактически, он заблокирует планировщик Erlang для текущего ядра ЦП, поэтому длительное время работы в C-land, скорее всего, испортит ваше (Erlang) планирование.

Например, на четырехъядерном процессоре Erlangпо умолчанию создаст 4 потока планировщика, каждый из которых будет занимать одно ядро.Любой процесс, выполняющий код C, будет блокировать планировщик, которому он назначен, до тех пор, пока этот код не завершит выполнение.

Работая с узлами C, вы полностью одиноки.Узел Erlang вообще не знает о планировании узла C, он заботится только о своем собственном планировании.Конечно, вы можете создать свое собственное расписание, например, выделить одно ядро ​​для узла C и три для узла Erlang или что-то подобное.

1 голос
/ 27 апреля 2011

Erlang управляет только параллелизмом, используя собственные легковесные процессы, которые не основаны на потоках. Обычно он запускает только несколько потоков, которые обслуживают многие тысячи процессов, которые он может порождать, которые обычно включают только один поток на процессор / ядро ​​при включенной SMP.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...