В 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, например, для кода, выполняющего интенсивные математические вычисления и обработку в циклах данных, находящихся в оперативной памяти.
Источники
править- Главная ссылка к новости (https://blog.krakjoe.ninja/201...) (Архивная копия от 23 февраля 2020 на Wayback Machine)
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.