В PHP 8 будет добавлен JIT-компилятор

31 марта 2019 года

Разработчики PHP официально утвердили (Архивная копия от 23 февраля 2020 на Wayback Machine) план включения JIT-компилятора в состав следующей ветки PHP 8, но отвергли предложение по интеграции JIT в следующий значительный релиз PHP 7.4, намеченный на конец 2020 года. Решение не спешить с внедрением JIT связано с желанием переосмыслить внутреннюю структуру проекта, чтобы избежать усложнения кодовой базы, а также с необходимостью получить дополнительное время для тестирования и ознакомления разработчиков с особенностями JIT.

Перед выполнением PHP транслирует исходные тексты PHP-скриптов в промежуточное представление (байткод), которое затем выполняется в виртуальной машине Zend VM. JIT поможет дополнительно поднять производительность за счёт преобразования байткода в специфичный для текущей аппаратной платформы машинный код, который может напрямую исполняться процессором, минуя интерпретатор байткода в Zend VM.

При этом после внедрения JIT кардинального роста производительности для web-разработчиков не предвидится, так как основным узким местом для большей части применяемых на сайтах PHP-скриптов является ввод/вывод (обработка сетевых соединений, чтение и запись файлов, обращение к СУБД, кэширование и т.п.), а не скорость выполнения на CPU. В процессе разработки прошлого набора оптимизаций было выявлено, что типичное PHP-приложение тратит примерно 20% времени на выполнение задач менеджера памяти, 10% на обработку хэш-таблиц, 30% на вызов внутренних функций и только 30% на выполнение кода в виртуальной машине.

Тем не менее, внедрение JIT не лишено смысла, так как даёт возможность вывести PHP за рамки web-разработки, благодаря повышению производительности при выполнении таких задач как машинное обучение, математические расчёты, анализ данных, 2D- и 3D-рендеринг. В ходе разработки ветки PHP 7 была проведена оптимизация методов работы с памятью и организации хранения структур данных, что позволило значительно поднять производительность. Например, в задачах, связанных с web-разработкой, PHP 7.3 догнал, а в некоторых тестах перегнал, по производительности альтернативную виртуальную машину HHVM для PHP, в которой применяется JIT-компиляция.

Теперь настал черёд оптимизации стадии выполнения. Так как интерпретатор байткода в Zend VM уже достаточно хорошо оптимизирован, предполагается, что JIT будет привлекаться только для выборочного выполнения конструкций, для обработки которых имеет значение производительность CPU, например, для кода, выполняющего интенсивные математические вычисления и обработку в циклах данных, находящихся в оперативной памяти.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «В PHP 8 будет добавлен JIT-компилятор», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.