PHP intenal book - php 엔진동작과 익스텐션 만드는 법에 관한문서


PHP 재단 3월 발표에서 이 문서 php스펙이랑 내용 추가한다고해서 찾아봄




PHP 생명주기





유닉스계열 OS 에서는 프로세스를 띄워서 관리한다고함 각각의 PHP인터프리터는 쓰레드 세이프한 상태라 TS 모드라고부름


1개 의 프로세스는 1개의 PHP 인터프리터를 실행시킨 뒤 1~수천개의 요청을 실행하게하고 뒤짐



MINT - 프로세스 모듈 시작 -

PHP 모듈들 php익스텐션들 전부 로딩


a.웹 리퀘스트(요청) - RINIT

라라벨등 프레임워크 시작

DB 커넥션 연결

요청 수행

b.종료 - RSHUTDOWN - 프레임워크등 종료


프로세스에서 다음 요청을 계속 수행

a b 반복


프로세스 뒤짐 - php익스텐션도 같이 뒤짐



* PHP 엔진은 요청 하나당 프로세스 생성 - 삭제가 아니였음


프로세스의 생성과 삭제는 웹서버에 맞긴다고함

PHP-fpm 이나 아파치 prefork 에따라 PHP 성능 널뛰기 하는 이유




Non - TS


윈도우에서 IIS 는 쓰레드 방식을 써야됨

IIS에서 PHP 인터프리터는 쓰레드마다 생성됨

요청 수행후 뒤짐


php 모듈 로딩


웹 리퀘스트 (요청)

쓰레드로 인터프리터 실행

a.요청 수행

b.실행 끝

인터프리터 뒤짐



새 웹 리퀘스트 (요청)

쓰레드로 인터프리터 실행

a.요청 수행

b.실행 끝

인터프리터 뒤짐

반복

php 모듈 내려감 <- 아떨때 내려가는지는 안나옴 이것도 iis 한테 맞긴듯



IIS 설정 안봤는데 쓰레드라서 수백개의 인터프리터 띄울듯???


IIS 가 프로세스 여러개 돌려서

안에서 php 엔진들 쓰레드로 띄우는거임




요약

* NTS 모드(유닉스,리눅스)에서는 PHP 엔진은 요청 하나당 프로세스 생성 - 종료가 아니였음

* TS 모드 (윈도우 IIS) 요청당 PHP 엔진을 쓰레드로 생성 - 종료


프로세스의 생성과 종료는 웹서버에 맞긴다고함

PHP-fpm 이나 아파치 prefork 의 프로세스 핸들링에 따라 PHP 서버 성능 널뛰기 하는 이유

--------------------------------------------------------------------------------