문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 PHP (문단 편집) == 구동방식 == 1. 사용자가 웹을 통해 요청하면 (터미널에서 입력시 3번으로) 1. 웹 서버는 PHP 의 SAPI 인터페이스를 통해 요청을 한다 PHP 프로세스 풀에서 기존 프로세스를 찾거나 생성을 한다 1. PHP 엔진에서 해당 파일의 opcode(실행 코드)캐시가 있는지 확인한다. 1. PHP 8.0부터 JIT 기능을 켰을때는 opcode를 JIT에서 바이너리로 컴파일한다. 이때는 PHP VM을 건너띄고 실행한다. 1. opcode 캐시가 없으면 PHP 파일을 opcode로 컴파일 한다. 있으면 opcode 를 실행하는데 PHP VM 을 통해 실행한다. 1. 사용자의 요청을 수행 1. 사용자 프로그램이 종료된다. 종료되면서 모든 객체와 변수등이 메모리에서 삭제된다. [* PHP 특징인 무상태성이다. 종료되면서 해당프로그램의의 변수,객체, DB커넥션 등등이 모두 사라진다.] 이하반복 * PHP VM은 리눅스에서 1프로세스당 1엔진이며, 1 ~ N번의 사용자 요청을 수행한 다음에 웹서버 프로그램의 프로세스 관리에 따라 프로세스가 종료된다. [* 사람들의 오해가 있는데 웹서버에서 구동하는 PHP는 1요청당 프로세스가 생성되고 종료되는 것이 아니다.] 윈도우 서버의 IIS NTS 모드와 리눅스에서 TS 방식은(위에 기술한 것) 조금 다른데 자세한 내용은 PHP intenals Books 에 나와있다.[[https://www.phpinternalsbook.com/php7/extensions_design/php_lifecycle.html]] [* PHP 특성상 TS모드로 리눅스에서 수행하는것이 더 좋다는걸 알 수있다]. PHP 문법에는 각종 타입들이 있는데, 실행중에 체크한다 (런타임 체크).[* PHP에는 제네릭이없는데 라스무스는 매년 열리는 PHP컨퍼런스인 phpCE 2018에서 제네릭 구현은 가능하지만 도입시 PHP가 실행 중 타입 체크를 하게되어 큰 성능저하가 있기 때문에 반대한다고 밝혔다.][* 같은 약타입 인터프리터언어인 파이썬은 제네릭이 있는데 파이썬은 실행중에는 타입체크를 전혀 안하기 때문에 제네릭은 코드작성할때만 있는것이라 성능저하가 없다. 여담으로 자바는 컴파일 되면서 제네릭이 삭제되기에 성능에 지장이없다.] [[페이스북]]은 자사 서비스를 개발하다가 당시 PHP의 성능 문제를 해소하기 위해 [[오픈 소스]]로 [[힙합(동음이의어)#s-3.1|HipHop for PHP]]와 [[힙합(동음이의어)#s-3.2|HipHop Virtual Machine]](HHVM)을 개발했다. 전자는 PHP 코드를 [[C++]] 코드로 변환한 뒤 컴파일하는 방식이고, 후자는 [[Java]]와 비슷하게 [[JIT]] 컴파일링을 하는 방식이다. 현재 HipHop for PHP는 개발을 중단하고 HHVM만 개발하여 내놓고 있다. 참고로 페이스북은 HHVM을 개발하면서 [[hack]]이라는 [[프로그래밍 언어]]도 만들었는데, hack 언어로 작성한 코드는 HHVM으로 실행한다. PHP 7.0에서 인터프리터 문법 파서를 재작성 했는데, AST 파서를 도입해서 HHVM의 강점인 속도를 따라잡았다. 2020년 말에 출시된 PHP 8부터는 인터프리터에 [[JIT]] 을 도입하여 JIT 구동 여부에 따라 7.4 대비 2배의 성능 향상이 있다 ([[https://www.php.net/releases/8.0/en.php|벤치마크 ]]). JIT은 위에 실행과정 설명 중 4번의 opcode 를 기계어로 컴파일을 하기 때문에 php 엔진에서 opcode를 인터프리트 할 때보다 보다 빨라지는 것이다. PHP-FPM이라는 것도 있는데, [[웹 서버]] 프로그램[* [[아파치 HTTP 서버]], [[NGINX]] 등]과 통신하는 모듈 형태이다. PHP로 [[HTTP/2]]를 지원하기 위해서는 PHP-FPM으로 구동해야 한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기