Рассматривая альтернативы Java для распределенной/параллельной/отказоустойчивой/масштабируемой внутренней среды, я обнаружил Erlang. Я потратил некоторое время на книги и статьи, где почти все из них (даже Java-зависимые парни) говорят, что Erlang - лучший выбор в таких средах, так как многие полезные вещи из коробки менее подвержены ошибкам.
Я был уверен, что в большинстве случаев Erlang работает быстрее из-за другой стратегии сбора мусора (за процесс), отсутствия общего состояния (чернил и процессов и процессов) и более компактных типов данных. Но я был очень удивлен, когда нашел сравнение Erlang vs Java math samples, где Erlang медленнее на несколько порядков, например. от x10 до x100.
Даже при одновременных задачах, как на нескольких ядрах, так и на одном.
Каковы причины этого? Эти ответы пришли на ум:
- Использование примитивов Java (= > без кучи /gc ) для большинства задач
- Одинаковое количество потоков в Java-коде и процессы Erlang, поэтому модель актера не имеет преимущества здесь.
- Или просто, что Java статически типизирована, а Erlang не
- Что-то еще?
Если это потому, что это очень специфические математические алгоритмы, может ли кто-нибудь продемонстрировать более реальные/практические тесты производительности?
UPDATE: у меня есть ответы до сих пор, суммируя, что Erlang не является подходящим инструментом для такого конкретного "быстрого Java-события", но то, что мне непонятно, - главная причина такой неэффективности Erlang: динамическая ввода, GC или плохого собственного компиляции?