Доминирование PHP пошатнулось, а JIT — контратака джедаев после тупика?

PHP

Список языков программирования TIOBE на 2017 год былвышел, лучший в мире язык PHP в очередной раз не стал языком программирования года.

Прошло 13 лет с тех пор, как он в последний раз становился языком программирования года (2004). Из диаграммы тенденций рейтинга программирования TIOBE за несколько лет также видно, что с 2014 года PHP, как правило, находится в постоянном нисходящем тренде.

Будет ли поколеблено господство PHP как лучшего языка в мире?

По данным W3Techs.com, в последние годы более 80% веб-сайтов выбрали PHP в качестве языка программирования на стороне сервера.Должна быть причина популярности языка.PHP стал популярен сначала из-за его простота, в то время как продолжая быть популярным в течение стольких лет, мы считаем, что это не только из-за его простоты использования в качестве серверного языка, если производительность недостаточно хороша, до сих пор трудно быть популярным .

Ниже мы, возможно, захотим рассмотреть, как изменилась производительность PHP.

PHP История эволюции производительности

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

История основных версий для улучшения производительности PHP:

  • 1994: Расмус Лердорф написал простую программу, написанную на языке Perl, для ведения личных веб-страниц под названием Personal Home Page.
  • 1995: Расмус Лердорф переписал «Персональную домашнюю страницу» на C, включая доступ к базе данных, и выпустил первую общедоступную версию 8 июня 1995 года. Это версия 1.0 PHP и первое использование имени «PHP».
  • 1997: Расмус Лердорф, Энди Гутманс и Зеев Сураски присоединились к разработке третьей версии языка с фундаментальным редизайном и значительно улучшенной производительностью. С тех пор также была создана и развита группа разработчиков PHP. В то время PHP также был переименован в PHP: препроцессор гипертекста.
  • 2000: PHP 4 на базе Zend Engine 1.0 был официально выпущен, и с тех пор производительность PHP стала официальной
  • 2004: выпущен PHP 5, использующий Zend Engine второго поколения. PHP включает множество новых функций, таких как расширенная объектно-ориентированная функциональность, введение PDO (объекты данных PHP, библиотека расширений для доступа к базам данных) и множество улучшений производительности.
  • 2015: 3 декабря был официально выпущен PHP 7.0 с использованием Zend Engine 3, что принесло 100% улучшение производительности, а также унифицированный синтаксис переменных, основанный на процессе компиляции абстрактного синтаксического дерева.

Как видите, PHP 7, выпущенный в 2015 году, совершил серьезный прорыв в производительности. Самым большим улучшением в этой версии является незаметное повышение производительности на 100%, включая скорость работы и потребление памяти. По сравнению с PHP 5 общая производительность PHP 7 увеличилась более чем вдвое.

Скачок производительности, вызванный PHP 7, принес большую пользу разработчикам, принеся пользу многим приложениям и расширив сценарии приложений PHP.

Итак, каков следующий шаг для повышения производительности PHP? Далее будут описаны основные этапы следующего улучшения производительности PHP: прогресс JIT и функции, которые могут появиться в следующей основной версии PHP. (Организовано из: «PHP Next: JIT», представленного братом Бердом на церемонии основания OSC в конце года 2017 г.)

Брат Бёрд сказал, что с момента выпуска PHP 7 и по настоящее время при подаче некоторой работы по улучшению производительности сопротивление станет намного меньше. Можно сказать, что PHP 7 — это тенденция, положившая начало направлению развития производительности PHP.

На самом деле оптимизировать программу с длинной историей сложнее, чем рефакторинг. В производительности PHP 7 произошел скачок вперед.Если эти результаты можно применить к веб-системе, использующей PHP, может потребоваться меньшее количество машин для поддержки служб с более высокими запросами.

PHP 7 Что дальше - JIT

Это очень многообещающий релиз, которым сейчас руководит Дмитрий Стогов из движка Zend. Хотя он основан на версии PHP 7.1, фактический номер версии еще не определен.

JIT что это? Почему JIT?

JIT (Just-In-Time Compilation) — не новая технология, многие языки, такие как Java, уже реализовали ее. Идея JIT очень проста, то есть программа динамически компилируется, когда программа работает, и генерируется машинный код, зависящий от платформы (например, собственный код процессора машины, на котором она выполняется), тем самым ускоряя скорость работы программы.

Почему JIT?

Давайте сначала посмотрим на поток выполнения PHP-файла. Процесс выполнения PHP-файла примерно следующий: сначала движок загружает PHP-файл, а интерпретатор интерпретирует и выполняет код один за другим.

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

Виртуальная машина PHP с открытым исходным кодом HHVM (HipHop Virtual Machine) от Facebook использует JIT, что на порядок улучшает результаты тестирования производительности PHP и позволяет разработчикам понять, что JIT — мощная технология, которая может превратить камень в золото. HHVM также в настоящее время является самой популярной реализацией PHP с JIT-компилятором.

PHP 7.1 Введен вывод типа

Чтобы реализовать JIT в PHP, он должен решить проблему вывода типов переменных. Просто подумайте, если вам все еще нужно много проверять типы при динамической компиляции, производительность резко упадет.

В PHP 7.1 появилась функция под названием «вывод типов», которая является предшественником JIT, который реализуется на данном этапе, но отдельно не разрабатывается. Это.

В PHP 7 вы можете управлять типом переменных, а в версии 7.1 этот механизм улучшен. Можно даже сказать, что текущий PHP уже является полустрого типизированным языком, но из-за истории слабо типизированного языка PHP все еще есть много кодов, которые не могут знать тип переменной перед запуском, поэтому в 7.1 PHP разработчики выполнили большое количество типов переменных.Работа вывода закладывает основу для последующих реализаций JIT.

Относительно простым способом вывода переменных в настоящее время является анализ потока данных, который анализирует контекст кода для вывода возможных типов переменных, таких как:

function calc ($a1, $b2) {        // $a1: [ANY], $b2: [ANY]
    $T3 = $a1 * 2;                // $T3: [LONG, DOUBLE]
    $a4 = $T3 % 1000;             // $a4: [LONG]
    $T5 = $b2 * 3;                // $T5: [LONG, DOUBLE]
    $b6 = $T5 % 1000;             // $b6: [LONG]
    $T7 = $a4 + $b6;              // $T7: [LONG, DOUBLE]
    return $T7;
}

Для этого улучшения все еще есть много трудностей.Брат Берд сказал, что их решение состоит в том, чтобы классифицировать JIT и достичь различных уровней динамической компиляции с помощью конфигурации, тем самым уменьшив сложность прогнозирования типов. Кроме того, для конкретных сценариев выполняется вертикальная оптимизация. В дополнение к анализу потока данных PHP 7.1 также выносит суждения на основе ветвей.

PHP 7.2 Продолжайте повышать производительность и улучшать вывод типов.

PHP 7.2 также был выпущен не так давно, и его производительность увеличилась примерно на 10% по сравнению с 7.1. В версии 7.2 представлены три новые функции анализа потока данных.

  • sparse conditional constant propagation
  • анализ побега
  • Удалить «мертвый код» (удалить код, который не имеет побочных эффектов)

PHP 7.2 также включает оптимизации, основанные на прогнозировании ветвлений, и, кроме того, представляет механизм виртуальной машины под названием «HYBRID VM».

Некоторые данные о производительности JIT

Итак, как же происходит улучшение производительности JIT? Это зависит от фактического узкого места проекта. Брат Бёрд сказал, что повышение производительности JIT зависит от конкретной ситуации. Если определенная логика требует больших вычислительных ресурсов, ее улучшение составляет около 1/4. Однако есть также некоторые сценарии, в которых повышение производительности неочевидно. Сценарий с интенсивным вводом-выводом После тестирования улучшение производительности не будет очевидным, поэтому обязательно рассмотрите конкретные сценарии использования.

Кроме того, Brother Bird сказал, что если вы хотите в будущем писать более дружественный код, вы можете подумать о добавлении дополнительных подсказок типов.

Наконец

Рейтинг сообщества языков программирования TIOBE является индикатором популярной тенденции языков программирования.Снижение рейтинга в определенной степени отражает текущую тенденцию языков программирования, но не может быть единственным критерием для измерения того, является ли язык отличным . Некоторые языки программирования имеют небольшую аудиторию и их сложно популяризировать в больших масштабах, но они имеют уникальные преимущества в своих областях знаний.

PHP по-прежнему занимает доминирующее положение в области серверных языков программирования, в то же время группа сообщества PHP продолжает итеративно обновлять версии и повышать производительность. В следующей основной версии будет представлена ​​функция JIT. Принесет ли эта технология, которая считается превращением камня в золото, лучшую производительность и большее развитие для PHP?

Ссылаться на:

Ханс Ион shirts.blog.163.com/blog/static…
Woohoo. Зайдите на Entest.com/2016/12/18/…
у-у-у. Краткое описание.com/afraid/ из 1, а не 5 из 684…