Подтвердить что ты не робот

Что быстрее: MRI Ruby или JRuby?

Если я использую Ruby on Rails, должен ли я устанавливать MRI/YARV Ruby или JRuby? Что быстрее?

4b9b3361

Ответ 1

Ответ зависит от многих переменных.

Но в целом, Ruby 1.9 быстрее, чем JRuby, но Ruby 1.8 медленнее, чем JRuby.

например. в соответствии с Компьютерная игра Benchmarks Game:

Кроме того, если ваше приложение многопоточно, JRuby может иметь некоторые преимущества перед стандартным Ruby
(a.k.a. MRI)], в зависимости от того, сколько ядер у вас есть.

Ответ 2

Недавние тесты поставили JRuby в лидерство, за которым последовали MagLev, Rubinius, затем MRI.

Бенчмаркинг сложнее. Ruby Benchmark Suite - это то, что больше всего подходит для тестирования Ruby. Если вы удалите любые тесты, которые не выполняются в любой реализации, вы получите следующий график.

RBS

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

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

Кроме того, каждая реализация выполняется быстро при разных вещах. МРТ очень быстро запускается, поэтому это хорошо для скриптов. Для более длительных приложений (например, для веб-приложений) Rubinius или JRuby обычно работают лучше, чем МРТ.

Ответ 3

Честно говоря, это зависит от вашего кода. Установите RVM или Pik на свой компьютер, установите кучу разных версий ruby ​​и попробуйте запустить в них код.

Например: приложение, которое часто перезапускается, не является отличным кандидатом для JRuby, поскольку JRuby имеет некоторое время нарастания, прежде чем Hotspot сможет эффективно оптимизировать ваш код. Аналогично, приложение, основанное на потоках, не является отличным кандидатом для Ruby 1.8.7, поскольку Ruby 1.8.X не может использовать более одного ядра на вашем процессоре и, таким образом, не может выполнять более чем по одному потоку за раз.

Ответ 4

Там действительно замечательная статья, сделанная ребятами на программировании, которая сравнивает множество разных вкусов рубина. Был опубликован в июле прошлого года, так что все еще достаточно недавно;) Там страница сравнивает их:

* Ruby 1.8.7 p299
* Ruby 1.9.1 p378
* Ruby 1.9.2 RC2
* IronRuby 1.0 (Mono 2.4.4)
* JRuby 1.5.1 (Java HotSpot(TM) 64-Bit Server VM 1.6.0_20)
* MagLev (rev 23832)
* Ruby Enterprise Edition 2010.02
* Rubinius 1.0.1

Возможно, вы сможете найти то, что ищете там.

http://programmingzen.com/2010/07/19/the-great-ruby-shootout-july-2010/

Ответ 5

На самом деле, ответ выше неверен, кроме ответа mikel, если вы заметили какой-либо бенчмарк для JVM, вы найдете его медленным, поэтому представьте себе производительность JRuby по сравнению с CRuby.

Лично я являюсь автором MRI Ruby, и я думаю, что эталонная диаграмма выше не соответствует действительности с момента появления YARV VM от MRI Ruby, эта версия стала самой быстрой из всех, и множество тестов доказали это так: "Смотрите Pat Шахинси бенчмаркинг и комментарии о трех известных интерпретаторах Ruby MRI Ruby, JRuby и Rubinius". Поэтому, на мой взгляд, нет смысла сравнивать из-за следующих логических точек: -

1- C намного быстрее, чем Java, потому что он работает непосредственно на аппаратном обеспечении и создает машинный код. В то время как JVM создает Bytecode, который считается промежуточным кодом.

2- JRuby содержит дополнительный шаг интерпретации в отличие от MRI Ruby "Токенизация, анализ, анализ АСТ и генерация инструкций YARV" Генерация кода "и, наконец, выполнение кода" Пока JRuby содержит дополнительный этап.

3 - Сбор мусора в MRI Ruby намного быстрее, чем сбор мусора в JRuby, даже если он стал лучше, когда они внесли некоторые изменения в метку и развернули технику сбора мусора.

4. Если вы занимались серфингом для большинства используемых компаний и технологий, они всегда использовали MRI Ruby, особенно ruby ​​1.9, я редко видел компанию, использующую JRuby, или даже видел много расширений или вкладов в нее, в отличие от MRI Ruby.

Наконец, Ruby 1.8 да он медленнее, потому что они выполняли код в самом AST, поэтому они использовали для разбора AST несколько раз, чтобы выполнить код.

Если я ошибаюсь, я надеюсь, что кто-то меня исправит.

Установите MRI Ruby dude с помощью RVM или из источника. Вы найдете множество драгоценных камней и расширений для работы с

Ответ 6

Многие пользователи ответили уже в отношении эталонных тестов. Ваш вопрос специально предназначен для использования с Rails.

Я нахожу это необычным, поскольку я не вижу четкой цели вопроса. Есть много там, используя МРТ, и многие используют JRuby и многие другие. Я бы пошел на стабильность, безопасность и ремонтопригодность в этом отношении, а не скорость.

Однако существует важное различие между MRI и JRuby.

В МРТ используется GIL. Это означает, что, хотя вы можете иметь несколько потоков, только один поток может быть активным одновременно. Также реализация потоков может различаться в разных версиях Ruby. В более новых версиях используются потоки ОС (хороший шаг вперед), вместо старых версий вместо них используются зеленые потоки.

В MRI нет реального parallelism.

MRI является многопоточным, а не потокобезопасным, а не параллельным.

JRuby является многопоточным, а не потокобезопасным и параллельным.

Parallelism может изменить скорость. Оба не являются потокобезопасными, поэтому вам все равно придется позаботиться об этом. Если вы ищете скорость и можете использовать parallelism, тогда я бы дал JRuby определенную Да.

Опять же, я не уверен, что скорость является наиболее важным фактором при выборе между МРТ и JRuby. Это экосистема. Поскольку вы просили скорость, я больше не буду вдаваться в это.