웹 개발에 널리 사용되는 스크립팅 언어로서 PHP는 최적화 된 메모리 관리, 오류 처리 메커니즘 및 JIT 컴파일 기술 덕분에 PHP7 버전에서 상당한 성능 향상을 달성했습니다. PHP7의 기본 작동 메커니즘을 이해하는 것은 고성능 PHP 응용 프로그램을 개발하기위한 중요한 기초입니다. 이 기사는 소스 코드 수준에서 시작하여 컴파일에서 실행에 이르기까지 핵심 프로세스를 분석합니다.
PHP의 컴파일 프로세스는 주로 어휘 분석, 문법 분석 및 중간 코드 생성의 세 단계로 나뉩니다. 다음은 하나씩 분해됩니다.
어휘 분석 단계에서 PHP 소스 코드는 변수, 숫자, 문자열 및 연산자와 같은 "토큰"이라는 가장 작은 언어 단위로 나뉩니다. 각 태그에는 유형 이름과 해당 값이 포함됩니다.
$var1 = 10;
$var2 = "hello world";
해당 마크는 다음과 같습니다.
T_VARIABLE $var1
T_WHITESPACE
T_EQUAL =
T_WHITESPACE
T_LNUMBER 10
T_SEMICOLON ;
T_WHITESPACE
T_VARIABLE $var2
T_WHITESPACE
T_EQUAL =
T_WHITESPACE
T_STRING "hello world"
T_SEMICOLON ;
구문 분석은 구문 트리로 일련의 태그를 구성하며, 노드는 조건부 명령문 또는 함수 호출과 같은 구문 구조를 나타냅니다. 구문 트리는 통역사가 코드 로직을 이해하도록 도와줍니다.
if ($a > $b) {
$max = $a;
} else {
$max = $b;
}
해당 구문 트리 구조는 다음과 같습니다.
if
├─ >
│ ├─ $a
│ └─ $b
├─ =
│ ├─ $max
│ └─ $a
└─ =
├─ $max
└─ $b
이 단계에서 구문 트리는 가상 머신에서 실행을위한 추상 중간 코드로 변환됩니다. 이 중간 언어는 특정 플랫폼에 의존하지 않으며 교차 플랫폼 실행 및 성능 최적화에 도움이됩니다.
function get_user_name($userid) {
$users = array(
1 => "John",
2 => "Mary",
3 => "Bob"
);
if (isset($users[$userid])) {
return $users[$userid];
} else {
return "Unknown";
}
}
생성 된 중간 코드는 다음과 같습니다.
FUNCTION get_user_name
PARAM $userid
ADD_ARRAY $users,1,"John",2,"Mary",3,"Bob"
IF isset,$users,$userid
GET_ARRAY $users,$userid
RETURN
ELSE
STRING "Unknown"
RETURN
ENDIF
END_FUNCTION
PHP가 중간 코드 생성을 완료하면 실행 단계에 들어가고 가상 머신은 코드 작동을 완료합니다.
PHP의 실행은 언어 코어와 확장 가능한 모듈로 구성된 통역사에 의존합니다. 핵심 부분은 기본 구문 및 프로세스 제어를 담당하며 기능 요구 사항에 따라 확장 모듈을 자유롭게로드 할 수 있습니다.
PHP7이 핫 코드 경로를 로컬 머신 코드로 동적으로 컴파일하여 특히 반복적 인 운영 집약적 시나리오에서 운영 효율성을 향상시킬 수 있기 때문에 도입 된 JIT 컴파일 기술.
PHP 가상 머신은 중간 코드를 실행하고 메모리 할당, 기능 호출 및 예외 처리와 같은 기본 작업을 완료해야합니다. 디자인은 실제 하드웨어 아키텍처를 말하며 크로스 플랫폼 실행 기능을 실현합니다.
PHP7은 기본 아키텍처에 대해 많은 최적화를 만들었으며, 컴파일 및 실행 메커니즘은 어휘 및 구문 분석, 중간 코드 생성, 가상 머신 실행 및 JIT 컴파일의 여러 링크로 나뉩니다. 개발자의 경우 이러한 메커니즘을 이해하면 애플리케이션 성능을 디버그하고 최적화하는 데 도움이 될뿐만 아니라 PHP 언어의 본질에 대한 더 깊은 이해를 얻을 수 있습니다.