Отменяет ли последняя версия MRI необходимость внедрения JRuby для достижения тех же преимуществ, что и нативные потоки?
Ответ - нет. Это не отменяет необходимости, и это зависит от вашего приложения, как указано в других ответах.
Кроме того, JRuby не позволяет вам работать в кластерном режиме, но это не проблема в отношении вашего вопроса, потому что он многопоточный и параллельный. Просто запустите в одиночном режиме столько потоков, сколько вам нужно. Он должен быть в полном порядке, если не даже более легким.
Позвольте мне дать вам несколько ссылок, которые дают больше информации и позволяют копать дальше.
В этом ответе обсуждаются эксперименты с MRI и JRuby, тестирующие одновременные запросы с использованием Puma (до 40 потоков). Это довольно всеобъемлющий.
Эксперименты доступны на GitHub, MRI и JRuby.
Предостережение заключается в том, что он проверяет только одновременные запросы, но не имеет состояния гонки в контроллере. Тем не менее, я думаю, вы могли бы реализовать тест из этой статьи Удаление config.threadsafe ! без особых усилий.
Разница между JRuby и MRI заключается в том, что JRuby может выполнять код параллельно. MRI ограничен GIL, и одновременно может выполняться только один поток. Дополнительную информацию о GIL можно прочитать в этой статье Никто не понимает ГИЛ.
Результаты весьма удивительны. МРТ быстрее, чем JRuby. Не стесняйтесь улучшать и добавлять условия гонки.
Обратите внимание, что оба являются многопоточными и не потокобезопасными. Разница в том, что MRI не может выполнять код параллельно, а JRuby может.
У вас может возникнуть соблазн сказать, почему я отвечаю «Нет», если эксперимент показывает, что МРТ работает быстрее.
Я думаю, нам нужно больше экспериментов и, в частности, реальных приложений.
Если вы считаете, что JRuby должен быть быстрее, потому что он может выполнять код параллельно, то причины могут быть следующими:
- Эксперименты должны выполняться в высокопараллельной среде, чтобы можно было использовать потенциал JRuby.
- Это может быть сам веб-сервер. Возможно, Puma не использует весь потенциал JRuby. У MRI есть GIL, так почему же он быстрее, чем JRuby, обрабатывает запросы?
- Могут иметь значение и другие факторы, которые являются более глубокими, но мы еще не обнаружили...
person
Ely
schedule
14.05.2015