Scala быстрее, чем Java 7, для обработки чисел и обработки тяжелых строк? - PullRequest
2 голосов
/ 21 июня 2011

Предположим, что существует два класса приложений:

(1) Интенсивное сжатие чисел и числовые и математические вычисления

(2) Интенсивное сопоставление выражения регулярного выражения, поиск по пути xpath и другие манипуляции со строкамигде строки в основном хранятся в классах коллекций.

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

Так что, если у меня есть выбор для реализации приложений всерверные бэкэнды, я могу выбрать либо Java 7, либо Scala.Какой из них выбрать, чтобы повысить производительность и создать более надежный код?

Ответы [ 4 ]

3 голосов
/ 21 июня 2011

Google недавно сделал несколько тестов, которые могут вас заинтересовать - см. Статью по ссылке: http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php

Эта статья на удивление ненаучна, но вы получите приблизительное представление о том, что можно сделать.Особый интерес может представлять раздел VF

Даниэль Малер улучшил версию Scala, создав более функциональную версию, которая хранится в каталогах Scala Pro.Эта версия содержит всего 270 строк кода, примерно 25% от версии C ++, и не только она короче, но и время выполнения улучшено примерно в 3 раза.Следует отметить, что эта версия также выполняет алгоритмические улучшения и поэтому не может быть напрямую сопоставима с другими версиями Pro.

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

Важным фактором будет то, насколько вы компетентны в программировании этих языков и насколько хорошо вы умеете их оптимизировать.Java, очевидно, более многословен, но у вас меньше шансов столкнуться с "ошибками" в производительности.

2 голосов
/ 21 июня 2011

Две точки, которые могут обеспечить более высокую производительность для числовых вычислений, чем в Java:

  • Практическая задача: Scala чрезвычайно упрощает параллельное вычисление «неловко параллельных» задач.Хотя то же самое можно было бы сделать в Java, это потребовало бы гораздо больше времени и опыта, что делает вероятным, что это будет сделано только в редких случаях.

  • Технический: Scala может специализироваться на универсальномструктуры данных для примитивных типов, что делает ненужными упаковку / распаковку.Компилятор Java не может этого сделать.

Scala использует строку Java, поэтому количество возможных улучшений здесь весьма ограничено.Но есть и другие структуры данных, такие как веревки, которые в некоторых случаях обеспечивают лучшую производительность, чем String.

1 голос
/ 22 июня 2011

В принципе, на самом деле не существует причины, по которой Scala будет быстрее, чем Java, для приложений, обрабатывающих числа.

Я бы не стал выбирать Java, Scala или любой другой язык JVM, если бы хотел написать серьезнуюприложение для вычисления числа производительности.

Из моего собственного опыта (и, конечно, это только случайное свидетельство и определенно не доказательство того, что это верно во всех случаях), JVM - не самая подходящая платформа длятяжелый хруст.Если важна скорость перехвата исходных чисел, вам, вероятно, будет лучше с чем-то более близким к «металлическому», например C ++, которое позволяет, например, использовать инструкции Intel SSE и выполнять другие низкоуровневые оптимизации или использовать графический процессор.с CUDA , если ваш алгоритм подходит для этого.

1 голос
/ 21 июня 2011

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

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

...