>  기사  >  백엔드 개발  >  PHP 8의 JIT 이해

PHP 8의 JIT 이해

coldplay.xixi
coldplay.xixi앞으로
2020-08-19 17:14:253739검색

PHP 8의 JIT 이해

【관련 추천: PHP 8의 JIT 이해8

PHP 8의 JIT 이해

TL;DR

PHP 8의 JIT 이해 8의 JIT(Just In Time) 컴파일러가 확장으로 PHP 8의 JIT 이해에 통합됩니다. Opcache 확장은 특정 파일을 컴파일하는 데 사용됩니다. 런타임 시 Opcode는 CPU의 명령어로 직접 변환됩니다.

즉, JIT를 사용한 후 Zend VM은 특정 opcode를 해석할 필요가 없으며 이러한 명령은 CPU 수준 명령으로 직접 실행됩니다.

PHP 8의 JIT 이해 8의 JIT

PHP 8의 JIT 이해 8 JIT(Just In Time) 컴파일러의 영향은 의심의 여지가 없습니다. 그러나 지금까지 JIT가 수행해야 하는 작업에 대해 알려진 바가 거의 없다는 사실을 발견했습니다.

많은 연구와 포기 끝에 PHP 8의 JIT 이해 소스 코드를 직접 확인하기로 결정했습니다. C 언어에 대한 나의 지식과 지금까지 수집한 모든 흩어져 있는 정보를 결합하여 이 기사를 작성했습니다. 이 기사가 PHP 8의 JIT 이해의 JIT를 더 잘 이해하는 데 도움이 되기를 바랍니다.

간단히 말하면 JIT가 예상대로 작동하면 코드가 Zend VM을 통해 실행되지 않고 일련의 CPU 수준 명령으로 직접 실행됩니다.

그게 전부입니다.

하지만 더 잘 이해하려면 PHP 8의 JIT 이해가 내부적으로 어떻게 작동하는지 고려해야 합니다. 별로 복잡하지는 않지만 소개가 필요합니다.

저는 PHP 8의 JIT 이해 작동 방식에 대한 대략적인 개요를 제공하는 블로그 게시물을 작성했습니다. 이 기사가 너무 많다고 생각되면 다른 기사를 확인하고 나중에 다시 오십시오. 상황이 더 이해하기 쉬워질 것입니다.

PHP 8의 JIT 이해 코드는 어떻게 실행되나요?

우리 모두 알고 있듯이 PHP 8의 JIT 이해는 해석된 언어인데 이 문장 자체는 무엇을 의미할까요?

PHP 8의 JIT 이해 코드(명령줄 스크립트 또는 웹 애플리케이션)를 실행할 때마다 PHP 8의 JIT 이해 인터프리터를 거쳐야 합니다. 가장 일반적으로 사용되는 것은 PHP 8의 JIT 이해-FPM 및 CLI 인터프리터입니다.

인터프리터의 작업은 간단합니다. PHP 8의 JIT 이해 코드를 받아 해석하고 결과를 반환하는 것입니다.

일반적으로 통역되는 언어는 이 과정을 따릅니다. 일부 언어에서는 몇 가지 단계를 생략할 수 있지만 일반적인 아이디어는 동일합니다. PHP 8의 JIT 이해에서 프로세스는 다음과 같습니다.

  1. 는 PHP 8의 JIT 이해 코드를 읽고 이를 토큰이라는 키워드 집합으로 해석합니다. 이 프로세스를 통해 인터프리터는 각 프로그램에 어떤 코드가 작성되었는지 알 수 있습니다. 이 단계를 렉싱 또는 토큰화라고 합니다.

  2. 토큰 컬렉션을 가져온 후 PHP 8의 JIT 이해 인터프리터는 이를 구문 분석하려고 시도합니다. 추상 구문 트리(AST)는 Parsing이라는 프로세스를 통해 생성됩니다. 여기서 AST는 수행할 작업을 나타내는 노드 집합입니다. 예를 들어, "echo 1 + 1"은 실제로 "1 + 1의 결과를 인쇄합니다" 또는 더 구체적으로 "작업을 인쇄합니다. 이 작업은 1 + 1입니다"를 의미합니다.

  3. AST를 사용하면 작업과 우선순위를 더 쉽게 이해할 수 있습니다. 추상 구문 트리를 CPU에서 실행할 수 있는 작업으로 변환하려면 전환 표현식(IR)이 필요하며, PHP 8의 JIT 이해에서는 이를 Opcode라고 합니다. AST를 Opcode로 변환하는 과정을 컴파일이라고 합니다.

  4. Opcode를 사용하면 재미있는 부분이 있습니다: 코드 실행! PHP 8의 JIT 이해에는 일련의 Opcode를 수신하고 실행할 수 있는 Zend VM이라는 엔진이 있습니다. 모든 Opcode가 실행된 후 Zend VM은 프로그램을 종료합니다.

이 그림을 보면 더 명확해집니다.

PHP 8의 JIT 이해 的解释流程.

PHP 8의 JIT 이해 해석 프로세스 개요의 단순화된 버전입니다.

보시다시피요. 질문이 있습니다. PHP 8의 JIT 이해 코드가 변경되지 않았더라도 실행될 때마다 이 프로세스를 계속 따를까요?

Opcode를 다시 살펴보겠습니다. 좋아요! 이것이 Opcache 확장이 존재하는 이유입니다.

Opcache Extension

Opcache 확장은 PHP 8의 JIT 이해와 함께 제공되며 일반적으로 비활성화할 필요가 없습니다. PHP 8의 JIT 이해를 사용할 때는 Opcache를 활성화하는 것이 가장 좋습니다.

그것이 하는 일은 Opcode에 메모리 공유 캐시 레이어를 추가하는 것입니다. 그 작업은 AST에서 새로 생성된 Opcode를 추출하고 실행 중에 Lexing/Tokenizing 및 Parsing 단계를 건너뛸 수 있도록 캐시하는 것입니다.

다음은 Opcache 확장이 포함된 프로세스 다이어그램입니다.

使用 Opcache 的 PHP 8의 JIT 이해 解释流程

Opcache를 사용하는 PHP 8의 JIT 이해의 프로세스를 설명합니다. 파일이 이미 구문 분석된 경우 PHP 8의 JIT 이해는 다시 구문 분석하는 대신 해당 파일에 대해 캐시된 Opcode를 가져옵니다.

렉싱/토큰화, 구문 분석 및 컴파일 단계를 완벽하게 건너뛰기

관련 학습 권장 사항: php 프로그래밍(동영상)

위 내용은 PHP 8의 JIT 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제