#c #multithreading #erlang
#c #многопоточность #erlang
Вопрос:
Если я использую erlang, скажем, как процесс создания, он выполняет основные функции, которые не слишком важны для скорости, такие как обмен данными с сервером и обработка сообщений связи сервер-клиент.
Затем я выбираю создать процесс в erlang и запустить из него код на c / c , сделает ли это мой код быстрее?
Будет ли erlang более эффективно обрабатывать многопоточность, чем эквивалент в c / c ?
Если бы я должен был создать много узлов c из erlang, будут ли они размещаться на одном ядре или erlang будет обрабатывать многопоточность. Это главный момент, о котором я задаюсь вопросом.
Ответ №1:
В вашем вопросе вы говорите о двух разных концепциях: Erlang обрабатывает код на C / C и узлы на C.
Запуск кода на C или C изнутри Erlang вообще не запланирован. Фактически, это заблокирует планировщик Erlang для текущего ядра процессора, поэтому длительное время выполнения на C-land, скорее всего, испортит ваше планирование (Erlang).
Например, на четырехъядерном процессоре Erlang по умолчанию создаст 4 потока планировщика, каждый из которых будет занимать одно ядро. Любой процесс, выполняющий код на C, будет блокировать назначенный ему планировщик до тех пор, пока этот код не завершит выполнение.
При запуске узлов C вы полностью предоставлены сами себе. Узел Erlang вообще не знает о планировании узла C, он заботится только о своем собственном планировании. Конечно, вы могли бы создать свое собственное планирование, например, выделить одно ядро для узла C и три для узла Erlang или что-то подобное.
Ответ №2:
Erlang управляет параллелизмом только с использованием своих собственных облегченных процессов, которые не основаны на потоках. Обычно он запускает только несколько потоков, которые обслуживают многие тысячи процессов, которые он может породить, которые обычно являются только одним потоком на процессор / ядро, когда SMP включен.
Он определенно ничего не знает ни о каких внешних потоках, и любые внешние процессы просто добавят накладных расходов на связь и сложности управления памятью и ресурсами во внешнем процессе.