Вышла новая версия Ruby Enterprise Edition (1.8.7-20090928)

Новая версия интерпретатора Ruby Enterprise Edition

Новая версия интерпретатора Ruby Enterprise Edition уже прошла тестирование в проекте Twitter и показала в среднем 30-процентное увеличение производительности по сравнению с предыдущей версией. Последняя версия базируется на Ruby 1.8.7-p174, в отличие предыдущих, построенных на версии 1.8.6. Версия 1.8.7 интерпретатора Ruby получила в последнее время широкое распространение, например, разработчики Ruby On Rails в новой версии 3.0 отказываются от поддержки более ранний версий интерпретатора.

Основные изменения

Использование патчей MBARI для интерпретатора Ruby позволило уменьшить использование оперативной памяти. Основные улучшения перечислены ниже.

Работа со стеком

Алгоритм распознавания в стеке указателей на объекты, подлежащие удалению («cборщик мусора») Ruby 'консервативно' сканирует стек, то есть если элемент в стеке похож на адрес валидного объекта Ruby, то элемент не удаляется. Из-за особенностей реализации интерпретатора Ruby и оптимизации на этапе компиляции в стеке скапливалось большое количество данных, похожих на указатели. Патч дает возможность удалить объекты, которые ранее не были бы удалены.

Интерпретатор Ruby использует неэффективный, линейный алгоритм выделения пространства в стеке при переключении между потоками. Этот алгоритм заменен на алгоритм c временем выполнения O(1).

Метапрограммирование

Добавлены методы __file__ и __line__ в классы Method, UnboundMethod и Proc для более эффективного использования возможностей метапрограммирования, которое базируется на интроспекции.

Многопоточноcть

Реализовано легковесное переключение между контекстами (zero-copy context switching). В версии 1.8 интерпретатора Ruby при переключении между потоками происходило копирование всего стека потока. В новой версии стеки потоков хранятся в разных адресных пространствах и переключаются изменением значения указателя стека, что позволило добиться 10-кратного увеличения производительности. Те кто использует Mogrel, смогут оценить преимущества такого решения, а использующие Phusion Passenger не смогут ощутить разницы, т. к. его ядро обработки запросом не многопоточно.

Другое

  • Ruby Enterprise Edition компилируется с ключами оптимизации размера (-Os);
  • Используется версия 1.3 библиотеки tcmalloc;
  • Используется менеджер пакетов RubyGems версии 1.3.5;
  • Менеджер пакетов Debian теперь помещает файлы в /usr/local, из-за чего отпадает необходимость модифицировать переменную окружения $PATH.
Подготовлено по материалам: blog.phusion.nl

Вам также может помочь