>  기사  >  백엔드 개발  >  Opcode 캐시와 JIT의 차이점은 무엇입니까

Opcode 캐시와 JIT의 차이점은 무엇입니까

little bottle
little bottle앞으로
2019-04-26 16:30:402432검색

이 기사는 주로 opcode 캐시와 JIT의 차이점에 대해 설명합니다. 관심 있는 친구들이 이에 대해 배울 수 있기를 바랍니다.

opcode 캐시와 JIT의 차이점을 설명하려면 먼저 중간 코드라고도 불리는 바이트코드와 기계어 코드의 차이점을 이해해야 합니다.

연산 코드(opcode)

기계 명령입니다. 예를 들어 어셈블리 언어로 작성된 작업 명령문이 있습니다.

machine code

기계어 명령어에 대한 과학적 이름, 때로는 Native Code라고도 불리는 은 컴퓨터의 CPU에서 직접 해석할 수 있는 의 데이터 .

기계어는 컴퓨터 CPU가 직접 읽고 실행하는 기계어 명령으로 가장 빠르게 실행되지만 매우 모호하고 이해하기 어렵고 작성하기 어려워 일반 실무자가 접근할 수 없습니다.

그리고 기계어 코드는 크로스 플랫폼을 지원하지 않습니다. 쉽게 말하면 CPU마다 사용하는 기계어 코드가 다릅니다.

Bytecode

은 실행 가능한 프로그램을 포함하고 일련의 op 코드/데이터 쌍으로 구성된 바이너리 파일입니다. 바이트코드는 일종의 중간코드로, 기계어보다 더 추상적이고 인터프리터의 번역을 거쳐야 기계어의 중간코드가 됩니다.

Bytecode는 하드웨어 환경에 관계없이 특정 소프트웨어 작업 및 소프트웨어 환경을 구현하는 데 주로 사용됩니다. 바이트코드가 구현되는 방식은 컴파일러와 가상 머신을 통해서입니다. 컴파일러는 소스 코드를 바이트코드로 컴파일하고, 특정 플랫폼의 가상 머신은 바이트코드를 직접 실행할 수 있는 명령어로 변환합니다. 바이트코드의 일반적인 응용은 Java 바이트코드이며, PHP는 일련의 opcode로 구성된 바이너리 파일입니다.

바이트코드는 런타임 시 가상 머신(JAVA의 JVM, PHP의 Zend 가상 머신)을 통해 변환되어 머신 명령어를 생성하므로 플랫폼 전반에서 더 잘 실행할 수 있습니다.

Bytecode는 중간 상태(중간 코드)의 바이너리 코드(파일)입니다. 기계어로 번역하려면 통역사가 필요합니다.

서문에서 CPU는 기계어 코드만 실행할 수 있다는 것을 알 수 있지만 하드웨어 플랫폼 전반에 걸쳐 애플리케이션을 실현하기 위해 다양한 프로그래밍 언어에 대한 가상 머신을 구현했으며 이 가상 머신은 우리가 작성하는 것 코드는 바이너리 코드(파일)로 컴파일됩니다. 이 바이너리 코드는 중간 코드라고도 합니다. Zend 가상 머신이 컴파일한 바이트코드를 opcode(실제로는 일련의 opcode)라고 합니다.

다음으로 opcode 캐시와 JIT를 소개하겠습니다.

JIT

현재 JIT 기술은 PHP에 도입되지 않았지만 Niao 형제는 PHP의 다음 주요 버전이 새로운 JIT 기능을 가져올 수 있다고 말했습니다. 기다려 보자! 하지만 JIT는 JAVA 생태계에서 매우 성숙한 기술이므로 JAVA의 JIT에 대해 이야기해 보겠습니다.

JIT는 Just In Time의 약자로 JIT 컴파일러입니다. JIT(Just-In-Time) 컴파일러 기술을 사용하면 Java 프로그램 실행 속도를 높일 수 있습니다.

보통 javac는 프로그램 소스 코드를 컴파일하고 이를 자바 바이트코드로 변환하는 데 사용됩니다. JVM은 바이트코드를 해당 기계어 명령어(기계어 코드)로 변환하고, 하나씩 읽어서 번역한 내용을 해석합니다. 하나씩. 분명히, 해석 및 실행 후에는 실행 속도가 실행 가능한 바이너리 바이트코드 프로그램보다 필연적으로 훨씬 느려질 것입니다. 실행 속도를 높이기 위해 JIT 기술이 도입되었습니다.

JIT는 다음에 사용할 수 있도록 번역된 기계어 코드를 저장합니다(LRU와 유사한 알고리즘이 있어야 함). JIT가 해야 할 일은 매우 간단하다는 것을 알 수 있는데, 중간 코드에서 번역된 기계어 코드를 임시로 저장해 두었다가(얼마 동안, 어떻게 선택하는지는 여기서는 소개하지 않는다), 기계어를 다시 사용할 때 , 번역이 하나 줄어듭니다.

opcode 캐시

이름에서 알 수 있듯이, 공식 웹사이트를 인용하면 OPcache는 PHP를 향상시킵니다. 미리 컴파일된 스크립트 바이트코드를 공유 메모리에 저장하여 PHP가 각 요청마다 스크립트를 로드하고 구문 분석할 필요를 없애줍니다. 그렇다면 opcode 캐시가 필요한 이유에 대해 이야기해 보세요

#🎜🎜 # PHP 스크립트를 실행하는 PHP 파서부터 스크립트 내용을 출력하는 과정은 크게 Zend 엔진이 파일을 읽고 어휘 분석, 구문 분석, 의미 분석을 거쳐 중간 코드를 생성하고 실행하는 5단계를 거친다. 중간 코드는 아래와 같다.

위 단계는 PHP 스크립트가 요청될 때마다 실행됩니다.

PHP 코드가 변경되지 않으면 opcode도 변경되지 않습니다

. 분명히 매번 opcode를 생성할 필요가 없으므로 PHP 코드가 변경되지 않으면 컴파일된 opcode를 캐시할 수 있습니다. 앞으로는 캐시에 있는 컴파일된 opcode에 직접 액세스할 수 있습니다.

opcode 캐싱을 활성화한 후의 흐름도는 다음과 같습니다.

요약

간단한 설명: JAVA의 JIT는 CPU에서 실행되는 기계어 코드를 캐시하는 데 사용되고, Opcode 캐시는 Zend 가상 머신에서 사용하는 중간 코드를 캐시하는 데 사용됩니다.

관련 튜토리얼: PHP 비디오 튜토리얼

위 내용은 Opcode 캐시와 JIT의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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