2012-09-21 2 views
0

저는 꽤 자주 Java 웹 응용 프로그램을 사용해 왔습니다. PHP 기반 웹 응용 프로그램이 Java 기반 응용 프로그램과 어떻게 다른지 궁금합니다.PHP 기반 웹 응용 프로그램 대 CGI

기본적으로 Java (servlet) 기반 웹 응용 프로그램은 단일 프로세스로 여러 요청의 요구를 충족시키는 멀티 스레드 환경입니다. 이 기능은 PHP에서 어떻게 작동합니까?

a) 모든 요청이 단일 프로세스입니까? 이러한 경우 어떻게하면 메모리 사용을 보장하고 다른 공유 리소스를 제어 할 수 있습니까?

b) PHP 기반 웹 응용 프로그램에 application scope/singleton이라는 개념이 있습니까?

c) 연결 풀을 사용할 수 있습니까?

기본적으로 PHP는 CGI와 어떻게 다른가요?

질문은 PHP 개발자에게는 어리석은 질문 일 수 있습니다. 이미 차이점이 문서화되어있는 곳이 있다는 것을 기쁜 마음으로 알게 될 것입니다. 감사.

답변

2

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 (좋은 사용자 경험을위한 나의 개인 목표 시간 제한) 이하로 유지되는 한 어떤 플랫폼을 사용하든 상관 없습니다.

+0

PHP는 CGI를 통해 사용할 수 있지만 정상적인 것은 아닙니다. mod_php는 웹 서버와 PHP 프로그램을 연결하는 일반적인 방법입니다. – Quentin

+1

'mod_php'는 아파치에만 해당됩니다. IIS, lighthttpd 등의 다른 서버는이를 사용하지 않습니다. ISAPI 빌드도 있습니다. 그러나 PHP를 사용하는 웹 서버 API와 관계없이 CGI가 제공하는 가장 보편적 인 기능을 준수 할 수 있도록 PHP는 여전히 상태 비 저장됩니다. – Dai

+0

@ Quentin .. mod_php는 CGI와 철학적으로 다른가요? 마치 요청 당 하나의 프로세스/연결 풀링 등의 고유 한 지원이 없다. – Gopal

관련 문제