홈페이지 » 어떻게 » 웹 서버는 새로운 요청을 어떻게 수신합니까?

    웹 서버는 새로운 요청을 어떻게 수신합니까?

    웹 서버에 대해 배우고 어떻게 작동 하는지를 지속적으로 듣고 있거나 요청할 때까지 기다리는 것이 궁금 할 수 있습니다. 이를 염두에두고 오늘의 수퍼 유저 Q & A 게시물에는 독자의 호기심을 충족시키는 해답이 있습니다..

    오늘의 질문 및 답변 세션은 Q & A 웹 사이트의 커뮤니티 중심 그룹 인 Stack Exchange의 하위 부문 인 수퍼 유저의 도움으로 이루어졌습니다..

    스크린 샷 xmodulo / Linux 스크린 샷 (Flickr).

    질문

    수퍼 유저 리더 user2202911은 웹 서버가 새로운 요청을 수신하는 방법을 알고 싶어합니다.

    웹 서버의 작동 방식에 대한 '세부 수준'에 대한 자세한 내용을 이해하려고합니다. 예를 들어, 아파치가 새로운 요청을 지속적으로 폴링하는지 또는 어떤 종류의 인터럽트 시스템이 작동하는지 알고 싶습니다. 그것이 인터럽트라면, 인터럽트를 촉발시키는 것은 무엇입니까? 네트워크 카드 드라이버입니까??

    웹 서버가 새 요청을 수신하는 방법?

    대답

    수퍼 유저 기고가 인 Greg Bowser가 우리에게 대답했습니다.

    짧은 대답은 일종의 인터럽트 시스템입니다. 본질적으로, 그들은 블로킹 I / O를 사용합니다. 즉, 새로운 데이터를 기다리는 동안 sleep (블록)을 의미합니다..

    1. 서버는 청취 소켓을 작성한 후 새 연결을 기다리는 동안 차단합니다. 이 시간 동안 커널은 프로세스를 중단 가능한 수면 다른 프로세스를 실행합니다. 이것은 중요한 포인트입니다. 프로세스 폴링을 계속 수행하면 CPU 리소스가 낭비됩니다. 커널은 할 일이있을 때까지 프로세스를 차단함으로써 시스템 자원을보다 효율적으로 사용할 수 있습니다..
    2. 새 데이터가 네트워크에 도착하면 네트워크 카드가 인터럽트를 실행합니다..
    3. 네트워크 카드로부터의 인터럽트가 있음을 알게 된 커널은 네트워크 카드 드라이버를 통해 네트워크 카드에서 새로운 데이터를 읽고이를 메모리에 저장합니다. (이 작업은 신속하게 수행되어야하며 일반적으로 인터럽트 처리기 내에서 처리됩니다.)
    4. 커널은 새로 도착한 데이터를 처리하고이를 소켓과 연관시킵니다. 해당 소켓에서 블로킹하는 프로세스는 실행 가능으로 표시되어 실행 가능한 상태가됩니다. 반드시 실행되는 것은 아닙니다 (커널이 다른 프로세스를 계속 실행하기로 결정할 수도 있음).
    5. 여유 시간에 커널은 차단 된 웹 서버 프로세스를 깨울 것입니다. (이제 실행 가능하기 때문입니다.)
    6. 웹 서버 프로세스는 시간이 경과하지 않은 것처럼 계속 실행됩니다. 블로킹 시스템 호출이 반환되고 새로운 데이터가 처리됩니다. 그런 다음 1 단계로 이동하십시오..

    설명에 추가 할 것이 있습니까? 의견에서 소리가 나지. 다른 기술에 정통한 Stack Exchange 사용자의 답변을 더 읽고 싶습니까? 전체 토론 스레드를 여기에서 확인하십시오..