Serwery sieci Web, takie jak lighttpd lub nginx, są dostępne w postaci nie-rozwidlonej lub select()
, zyskując coraz większą popularność.Jak działa serwer WWW, który nie jest rozwidleniem?
Chociaż istnieje wiele dokumentów wyjaśniających rozwidlające się serwery (na różnych poziomach szczegółowości), dokumentacja dla serwerów niezwiązanych z rozwidleniem jest niewielka.
ja szukam ptasie oczy widzenia jaknon-rozwidlone serwer internetowy działa. (Pseudo-) lub diagram stanu maszyny, rozebrany do minimum , byłby świetny.
Jestem świadomy następujących zasobów i uznałem je za pomocne.
Jednak jestem zainteresowany zasadami, a nie szczegóły implementacji.
Konkretnie:
Dlaczego ten typ serwera czasami nazywane non-blokowanie, kiedy
select()
zasadniczo blokuje?Przetwarzanie żądania może zająć trochę czasu. Co dzieje się z nowymi żądaniami w tym czasie, gdy nie ma określonego wątku lub procesu? Czy przetwarzanie żądań zostało w jakiś sposób przerwane lub czas został przerwany?
Edit: Jak rozumiem, podczas gdy wniosek jest przetwarzany (na przykład plik odczytać lub uruchomić skrypt CGI) serwer nie akceptuje nowych połączeń. Czy nie oznacza to, że taki serwer może nie mieć wielu nowych połączeń, jeśli skrypt CGI działa, powiedzmy, 2 sekundy?
myślałem, że zakaz rozwidlone serwer WWW byłby zły mecz na dowolnym serwerze WWW, który chciał się z serwerem więcej niż trywialny ilości dynamicznej zawartości . – Eddie
@Ddie Co najmniej. W przypadku n procesorów, posiadanie więcej niż n wątków nie pozwoli ci wykonać więcej pracy. Odpowiednio zaprojektowany serwer asynchroniczny może wykonywać tak samo dużo pracy, jak rozwidlanie lub gwintowanie. –
@Nick Johnson: To zależy. Jeśli masz N procesorów i N wątków, do tego stopnia, że jedno z żądań blokuje oczekiwanie na I/O, w rzeczywistości nie używasz procesora, chyba że utworzysz więcej wątków. Na przykład, jeśli musisz przejść do bazy danych, aby spełnić żądanie dynamiczne, wątek zostanie zatrzymany do momentu otrzymania odpowiedzi. Mając tylko N wątków, możesz spędzić większość czasu na oczekiwaniu i tylko niewielką część czasu na przetwarzanie. – Eddie