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 개발자 중에 원리 모르고 그냥 무지성 세팅하는 개발자들 대부분일거임
리눅스에서 설치하면 그냥 TS 버전(프로세스 모드)깔림
NTS로 컴파일해서 설치하면 되지.. 다들 패키지 설치만 해서 그런가
다들 패키지 쓸껄? 익스텐션 개발할때나 컴파일해서 쓰는줄
무지성 패키지 설치해서 쓰다보면 나중에 대형 사이트 되면 무조건 제약 생길텐데 .. 요즘엔 도커 같은 컨테이너 기술들 많이 있어서 미리 세팅해두면 되지
그 php8.1 에서 fpm 무슨 자식프로세스값 32로 하드코딩한거 ini로 뺏다던데 그런것들 좀있나보네 컴파일하면 상수들 바꾸면되니까
PHP는 그런 내용보다 방향 자체를 확실히 했으면 좋겠음. 웹 특화 언어로 갈거면 거기에 맞춰서 쭉 가던가. 아니면 다른 언어처럼 어플리케이션이나 소켓서버 같이 확장 언어로 갈것인가 이런 부분을. 시간이 흐를수록 결과물은 점점 더 대형화 되어가는데 PHP 같이 버전업 한번 할 때마다 다 뜯어고쳐야 하면 안쓰려하지