Kiedy dowiadujesz się o serwerach internetowych i ich działaniu, możesz być ciekawy, czy ciągle nasłuchują żądań, czy oczekują, 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, społecznościowego forum z pytaniami i odpowiedziami.
Zrzut ekranu ze zdjęciami xmodulo / Linux (Flickr).
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, 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ń?
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 nasłuchujące gniazdo, a następnie blokuje je podczas oczekiwania na nowe połączenia. W tym czasie jądro umieszcza proces w przerywany sen stan i uruchamia inne procesy. To jest ważna kwestia; ciągłe odpytywanie procesu powodowałoby marnowanie zasobów procesora. Jądro może bardziej wydajnie 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, że jest 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, który blokuje się na tym gnieździe, zostanie oznaczony jako działający, co oznacza, że można go teraz uruchomić. Niekoniecznie działa natychmiast (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.