Я действительно не понимаю, как Erlang может быть более эффективным, чем С++?
Почему Эрланг сказал, что он больше подходит для серверного программирования на веб-играх, чем Java и С++?
Ответ 1
Erlang намного менее эффективен, чем С++. Эрланг большой силой является масштабируемость, а не эффективность. Он будет линейно масштабироваться на нескольких процессорах и, благодаря своей модели программирования и связи, будет очень легко масштабироваться по всем кластерам машин.
Чтобы быть ясным, Erlang не будет масштабироваться больше, чем С++; он просто масштабируется легче, чем С++. Гораздо легче. См. Главы 5 и 6 Параллельное программирование в Erlang для очень хорошего объяснения, почему это так.
Ответ 2
Я вижу несколько причин для этого:
- Erlang предназначен для Concurrency
- Erlang предназначен для распределенных систем
- Erlang предназначен для систем Soft Real Time
- Erlang предназначен для доступности
Однако он не подходит для хруста, но имеет хорошую доступность для взаимодействия с C и С++ и другими языками. Используйте правильный инструмент для правильной работы.
Предназначен для Concurrency
Erlang является параллельным ориентированным языком программирования и хорошо подходит для приложений, которые могут быть высокопараллелизированы, то есть игровые серверы. Процессы Erlang гораздо более легкие и имеют хорошую производительность в процессе коммуникации. Это означает, что приложение, внедренное в erlang, может иметь гораздо больше процессов, чем приложение на С++ может иметь потоки. Также см. Мой вопрос Технически, почему процессы в erlang более эффективны, чем потоки ОС.
Предназначен для распределенных систем
Erlang также имеет встроенные функции, которые делают программиста более продуктивным при работе с распределенной системой. Существует встроенный язык примитивов для отправки и получения сообщений между процессами, и он используется таким же образом, если процесс находится на другом ядре или компьютере. Также программисту не приходится разбираться с сортировкой и сериализацией, когда сообщения отправляются между процессами, встроенными в язык.
Предназначен для систем Soft Real Time
Erlang предназначен для мягких систем реального времени, и это полезно при работе с игровыми серверами. По сравнению с С++ он имеет встроенное управление памятью, которое будет намного более продуктивным для программиста. С++ и malloc будут испытывать проблемы при использовании многих потоков и могут быть узким местом (см. Презентацию Поддержка Erlang SMP - за кулисами в ( 14:00)). По сравнению с Java, сборка мусора Erlang выполняется для каждого процесса (гораздо меньшая единица), и это будет полезно в режиме реального времени.
Предназначен для доступности
Erlang предназначен для телекоммуникационных приложений, где доступность критически важна. Одной из возможностей доступности является то, что приложения могут обновляться во время выполнения, с возможностью обмена горячим кодом. Это может быть полезно, если вы хотите обновить свой игровой сервер, пока он еще находится в сети.
Я бы рекомендовал посмотреть эту презентацию: Erlang - Программное обеспечение для параллельного мира
Ответ 3
Это не об эффективности, когда Erlang продвигается лучше, чем C. Это касается обработки ошибок и concurrency. Сервер, написанный в Erlang с использованием правильных принципов OTP, автоматически получит отличные способы восстановления после ошибок.
Можно сказать, что Erlang более эффективен для программиста, чтобы написать серверное приложение. И когда он будет работать, он будет более стабильным.