Java 웹 응용 프로그램은 상태 저장, 실행 시간이 긴 Java 프로세스에서 호스팅 (즉, 실행)됩니다. 이 때문에 메모리 내 개체 캐싱과 스레드 조작 기능을 활용할 수 있습니다.
표준 CGI 모델 (현재는 FastCGI 제외)은 상당히 간단합니다. 프로세스가 시작되고 들어오는 HTTP 요청이 전달됩니다. CGI 프로세스는 요청 자체 (필요한 경우 자체 스레드 생성 포함)를 처리 한 다음 HTTP 응답을 자식 CGI 프로세스를 생성 한 프로세스에 반환합니다. 그런 다음 CGI 프로세스가 종료되므로 메모리에 보관 된 모든 것이 손실되고 디스크의 데이터베이스 나 파일과 같은 일종의 지속 매체에 직렬화되어야합니다.
(추측 : CGI의 디자인은 1990 년대 초반 서버에서 사용할 수있는 제한된 리소스와 관련이 있으며 웹 사이트를 자주 방문하지 않았던 방식으로 그런 메모리를 사용하는 것이 의미가 없으며, 거대한 규모의 프로젝트에서 일한다면, 전용 상태 서버가 있기 때문에 아마도 메모리 내 캐싱에 관심이 없을 것입니다.
PHP는 CGI 시스템이므로 스레드를 지원하지 않는 것과 같이 "요청 당 하나의 서버 프로세스"모델의 제한 사항을 상속합니다. PHP를 개발자가 의식적으로 결정한 것으로 보입니다. 예를 들어 동기화에 대해 걱정할 필요가 있고, PHP가 아마도 "초보자 용 언어"일 것입니다. 요즘에는 웹 서핑 시나리오에서 멀티 스레딩을 사용해야하는 경우 PHP는 처음부터 잘못된 도구 일 것입니다.
PHP는 CGI와 다르지 않습니다 - PHP는 CGI를 구현합니다. Java 웹 서버는 CGI를 사용하지 않습니다 (최소한 Java 응용 프로그램을 제공하지 않기 때문에 Java 서블릿 호스트의 CGI 구현이 있지만 복잡한 것은 아닙니다).
PHP는 상태가 좋지 않기 때문에 연결을 풀링 할 수 없음을 의미하므로 실제로는 문제가되지 않습니다. PHP와 MySQL을 MySQL과 함께 사용하면 작업이 놀라 울 정도로 저렴하다는 것을 알 수 있습니다. 데이터베이스에 연결하고 SELECT에서 일부 데이터를 가져온 다음 10 년 된 시스템에서도 5ms 미만의 형식으로 HTML 테이블을 반환 할 수 있습니다. 페이지 생성 시간이 30ms (좋은 사용자 경험을위한 나의 개인 목표 시간 제한) 이하로 유지되는 한 어떤 플랫폼을 사용하든 상관 없습니다.
출처
2012-09-21 06:05:47
Dai
PHP는 CGI를 통해 사용할 수 있지만 정상적인 것은 아닙니다. mod_php는 웹 서버와 PHP 프로그램을 연결하는 일반적인 방법입니다. – Quentin
'mod_php'는 아파치에만 해당됩니다. IIS, lighthttpd 등의 다른 서버는이를 사용하지 않습니다. ISAPI 빌드도 있습니다. 그러나 PHP를 사용하는 웹 서버 API와 관계없이 CGI가 제공하는 가장 보편적 인 기능을 준수 할 수 있도록 PHP는 여전히 상태 비 저장됩니다. – Dai
@ Quentin .. mod_php는 CGI와 철학적으로 다른가요? 마치 요청 당 하나의 프로세스/연결 풀링 등의 고유 한 지원이 없다. – Gopal