2013-02-20 1 views
6

안녕하세요 제 질문은 데이터 흐름이 Apache 웹 서버 + PHP에서 정확하게 작동하는 방식입니다.apache php> users requests

사용자가 url : localhost/index.php에 액세스 할 때 동시에 다른 사용자가 동일한 URL에 액세스 할 때 요청이 하나씩 (다중 스레드가 아닌) 실행되고 첫 번째 사용자가 다른 사용자에게 응답을받는 것으로 추측합니다.

질문 : 어떻게 든 첫 번째 요청이 1 분 정도의 긴 시간 동안 루프에 머물러 있다면 다른 사용자는 첫 번째 요청을 완료 한 후 요청을 완료해야 Apache Web Server + PHP에서 응답을받을 수 있습니다. 응답이 '예'인 경우 (다른 사용자는 대기열에서 대기해야 함) : 대기열에서 대기하지 않도록 병렬 (다중 스레드) 요청을 수행 할 수 있습니까?

+0

아파치에는 선택할 수있는 몇 가지 멀티 스레딩 모델이 있으며 PHP에는 여러 가지 SAPI가 있습니다. 실제로는 코딩의 관점에서 관련이 없습니다. –

답변

9

PHP는 단일 스레드 일 수 있지만 Apache는 다중 프로세스 및 멀티 스레드. 이렇게하면 많은 요청을 동시에 실행할 수 있습니다. 사실 동시 요청 수를 구성 할 수 있습니다.

실제로 이러한 요청을 처리하는 아파치가 대기 중인지, mod_status (http://httpd.apache.org/docs/2.2/mod/mod_status.html)를 통해 서비스 중인지 확인할 수 있습니다.

+1

동일한 스크립트가 실행되도록 요청되면 먼저 1 분 이상 일시 정지 요청을 하시겠습니까? –

+0

두 명의 다른 사용자를 의미합니까? 그렇다면 네. 아파치는 많은 사람들에게 동시에 서비스를 제공 할 것이다. 많은 아파치 서버가 모두 독립적으로 작동하는 것처럼 생각할 수 있으며 아파치를 한 번만 설치해도 다른 사람들이하고있는 일을 신경 쓰지 않아도된다. –

+2

브라우저에서 호출 한 후 8 시간 후에 실행되는 스크립트가 있지만 다른 브라우저 탭에서 다른 스크립트를 열려고하면 응답을 기다리는 것처럼로드됩니다 (크롬 문제는 있어야 함)하지만 다른 브라우저에서 열려 있으면 (ie9) 나는 응답을 가능한 빨리 얻을 수있다, 이것은 아파치가 멀티 스레드임을 증명한다. –

2

아파치에 여러 개의 스레드가있어 여러 개의 PHP 스크립트를 동시에 실행할 수 있습니다.

Nginx와 같은 웹 서버는 이벤트 기반 아키텍처를 사용합니다. 비동기 I/O 및 모든 재즈.

웹 서버에는 대개 한 번에 두 개 이상의 요청을 처리 할 수있는 메커니즘이 있거나 적어도 가능한 것처럼 보이게합니다.

아파치는 스레드를 사용하며 Nginx는 이벤트 루프를 사용하지만 사용자가 원하는 의미로 직렬이 아닙니다. 이유는 매우 간단합니다. 자원을 낭비합니다. PHP 스크립트가 하드 디스크가 올바른 위치로 이동하기를 기다리는 동안 읽는 파일에서 블록을 읽을 수 있으므로 다른 일을 할 수도 있습니다. I/O가 필요없는 다른 요청을 처리하십시오.

다른 사용자가 요청하기 전에 일부 요청이 완료되는 것이 중요 할 경우보다 비동기식 비동기 아키텍처로 전환하는 것을 고려해야합니다. 현재 솔루션에 얼마나 투자했는지 모르겠습니다. 이벤트 처리는 간단한 폴링 또는 심지어 long poll과 같이 구현할 수 있습니다.

+1

나는 아파치가 멀티 스레드이고 이론적으로 같은 시간에 병렬 요청을 실행한다는 것을 이해할 수있다. 하지만 같은 스크립트가 실행되도록 요청되면 먼저 1 분 이상 동결을 요청해야합니다. 두 번째 요청은 같은 시간에 실행되거나 첫 번째 요청을 마치기를 기다릴 것입니까? –