W jaki sposób serwery sieciowe nasłuchują nowych wniosków?
Kiedy dowiadujesz się o serwerach internetowych i ich działaniu, możesz być ciekawy, czy ciągle nasłuchują żądań, czy też czekają, aż otrzymają prośbę o podjęcie działania. Mając to na uwadze, dzisiejszy post pytań i odpowiedzi dla SuperUser zawiera odpowiedzi, które zaspokoją ciekawość czytelnika.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.
Zrzut ekranu ze zdjęciami xmodulo / Linux (Flickr).
Pytanie
Czytnik SuperUser user2202911 chce wiedzieć, w jaki sposób serwery internetowe nasłuchują nowych żądań:
Próbuję zrozumieć "głębszy poziom" szczegółów działania serwerów sieciowych. Chcę wiedzieć, czy serwer, na przykład Apache, na bieżąco, ciągle szuka nowych żądań lub działa przez jakiś system przerwań. Jeśli jest to przerwanie, co wywołuje przerwanie? Czy to jest sterownik karty sieciowej?
W jaki sposób serwer sieciowy nasłuchuje nowych żądań??
Odpowiedź
Pomysłodawca SuperUser Greg Bowser ma dla nas odpowiedź:
Krótka odpowiedź to jakiś system przerwań. Zasadniczo używają blokujących I / O, co oznacza, że śpią (blokują) podczas oczekiwania na nowe dane.
- Serwer tworzy gniazdo nasłuchiwania, a następnie blokuje je podczas oczekiwania na nowe połączenia. W tym czasie jądro wprowadza proces w przerywany sen stan i uruchamia inne procesy. To jest ważna kwestia; ciągłe odpytywanie procesu powodowało marnowanie zasobów procesora. Jądro może efektywniej wykorzystywać zasoby systemowe, blokując proces, dopóki nie będzie za to pracy.
- Kiedy nowe dane docierają do sieci, karta sieciowa wydaje przerwanie.
- Widząc przerwanie z karty sieciowej, jądro, za pośrednictwem sterownika karty sieciowej, odczytuje nowe dane z karty sieciowej i zapisuje je w pamięci. (Musi to być zrobione szybko i jest zwykle obsługiwane wewnątrz obsługi przerwań.)
- Jądro przetwarza nowo przybyłe dane i kojarzy je z gniazdem. Proces blokujący to gniazdo zostanie oznaczony jako działający, co oznacza, że teraz może zostać uruchomiony. Niekoniecznie działa od razu (jądro może zdecydować o uruchomieniu jeszcze innych procesów).
- W czasie wolnym jądro obudzi zablokowany proces serwera WWW. (Ponieważ teraz można go uruchomić).
- Proces serwera sieciowego jest kontynuowany tak, jakby nie upłynął czas. Jego wywołanie systemowe blokowania zwraca i przetwarza wszelkie nowe dane. Następnie przejdź do kroku 1.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.