2011-03-20 2 views
1

매우 간단한 두 개의 ajax POST 요청 (successivly)을 실행하면 Apache 서버는 요청 된 순서와 동일한 순서로 항상 응답하는 것처럼 보입니다. 첫 번째 요청보다 훨씬 적은 처리 시간.Apache/2.2.6 (Win32) 및 듀얼 코어 PC의 멀티 스레딩

서버가 Request1을 처리하는 데 걸리는 시간은 30 초입니다. 서버가 Request2를 처리하는 데 걸리는 시간은 10 초입니다.

 var deferred1 = dojo.xhrPost(xhrArgs1); 
     var deferred2 = dojo.xhrPost(xhrArgs2); 

필자는 아파치가 내 듀얼 코어 컴퓨터에서 "병렬화"를 달성 할 것으로 기대합니다. 이는 분명히 일어나지 않습니다.

각 요청을 별도의 broswer에서 동시에 실행하면 정상적으로 작동하며 Request2가 먼저 반환됩니다.

현황 : 50 생 ThreadsPerChild 50

  • PHP 버전을 MaxRequestsPerChild 값 :

    1. 가있다 httpd.conf를 모두 클라이언트 요청이 거의 동시에 수신
    2. 아파치의 액세스 로그 상태 5.2.5, 그것은 예상대로입니다. 서버 측에서
    3. PHP 코드는 수면 (30)/절전 (10)

    같은 브라우저에서 실행할 때 나는 "병렬"를하지 않는 이유에 대해 어떤 생각 같은 간단한입니까?

    주셔서 감사합니다이 요청은 동일한 브라우저에서 전송

  • +0

    예, 있습니다. 또한 젠드 프레임 워크. –

    +0

    죄송합니다. 귀하가 정확히 답변을 드렸을 때 제 의견을 삭제했습니다 :-(다시 게시하여 귀하의 의견이 문맥에 어긋나지 않도록하십시오 : 귀하가 세션을 사용하고 있는지 묻는 질문에 대답했습니다.) –

    +0

    FWIW, (1)'dojo.xhrPost'는 생성자가 아니기 때문에, 앞에'new' 키워드를 사용해서는 안됩니다. (2) 두 개의 요청은 XHR은 기본적으로 비동기식이기 때문에 다른 사람이 끝내기를 기다리지 않습니다. –

    답변

    1

    , 그들은 둘 다 동일한 세션를 공유 할 수 있습니다.

    세션은 파일 (즉 디폴트의)는, 두 개의 스크립트가 동시에에서 동일한 세션을 사용하지 않도록 에 사용되는 잠금 mecanism가 저장 될 때 - 즉이 발생할 수 있도록 상기 제 1 스크립트의 상기 세션 데이터는 상기 제 2 스크립트에 의해 겹쳐 쓰여지는 것을 특징으로하는 방법.

    첫 번째 스크립트가 완료되기 전에 두 번째 스크립트가 시작되지 않습니다. 첫 번째 스크립트에서 생성 된 (첫 번째 스크립트에서 생성)의 잠금을 기다리고 있습니다.

    세션 데이터를 다음 sleep()(인용) 전에 세션을 닫습니다 문제에 대한 해결책이 될 수있다 -


    는 더 많은 정보를 위해, session_write_close()의 매뉴얼 페이지를 살펴 일반적으로 스크립트가 session_write_close(), 를 호출 필요없이 종료 후 저장하지만 세션 데이터가 에 잠겨로 동시 쓰기 하나의을 방지한다스크립트는 어떤 시간에 세션에서 작동 할 수 있습니다.
    프레임 세트를 세션과 함께 사용하면이 잠금으로 인해 하나씩로드하는 프레임을 발생합니다.
    세션 변수를 모두 변경하면 곧 으로 세션을 종료하여 프레임을 모두로드하는 데 필요한 시간을 단축 할 수 있습니다.

    +0

    안녕하세요, 파스칼, 완벽하게 작동합니다. 많은 감사합니다. –

    +0

    환영합니다. -) 재미있게 보내십시오! –

    0

    브라우저는 일반적으로 동일한 사이트에 대해 2 개의 연결 수 제한이 있습니다 (일부 브라우저에서는 제한이 높아질 수 있음). 일부 브라우저는 이미지 등을 다운로드하고 XHR을 연결하기 위해 하나의 연결을 유지합니다. 즉, 두 개의 XHR 통화가 실제로 동일한 연결에서 하나씩 차례로 나가는 것을 의미합니다.

    브라우저는 비동기이기 때문에 각 XHR 호출 후에 즉시 반환되지만 내부적으로는 요청을 일괄 처리 할 수 ​​있습니다.

    두 개의 서로 다른 브라우저에서 실행할 때 분명히 두 개의 연결이 있으므로 두 개의 XHR 요청이 서로 다른 연결로 나옵니다. 여기에 문제 없습니다.

    이제 브라우저에 따라 다릅니다. 브라우저가 XHR 호출로 두 연결을 모두 사용할 수있게하면 최대 두 개의 요청이 동시에 실행될 수 있습니다. 그러면 서버가 먼저 할 서버가 될 것입니다. 당신이 (또는 번호> 2) 동시에 XHR의 요청을하려고하면 어떤 속도에서

    는, 당신은 2 개 이상은 최신 브라우저에서 동시에 서버에서 실행하지
    것이다 .