2009-09-14 5 views
18

To prawdopodobnie głupie pytanie, ale czym właściwie jest "niezablokowany serwer WWW"? Wszystkie serwery internetowe są technicznie nieblokujące, czyż nie? w przeciwnym razie, jak mogłyby obsługiwać jednoczesne połączenia? Apache2 osiąga to za pomocą kombinacji fork() i pthreads. Czym dokładnie różnią się Tornado (i Twisted)? Czy oni po prostu ustawić kilka gniazd do trybu bez bocking, zbudować listę FD (lub odpowiednik), a następnie pętli nad tym za pomocą jednego wielkiego select() sys call?Tornado jest "względnie prostą, nie blokującą się strukturą serwera WWW napisaną w języku Python" - może nieco wyjaśnić, co to oznacza?

Gdzie użyłbyś takiego frameworku i jakie korzyści mogą dać ci Apache2 (lub inne popularne serwery)? Dzięki

Odpowiedz

12

Ten article on EventMachine może również daje wskazówkę:

Zanurzony w tradycji rozwidlone/ gwintowanych web-serwerów znalazłem się raczej zaskoczony, kiedy dołączył jeden z projektów badawczych na Uniwersytecie Waterloo kilka lat temu: my przeprowadziliśmy testy porównawcze różnych serwerów internetowych Architekturami i najlepszymi wykonawcami były wszystkie serwery sterowane zdarzeniami.

Jak pestered każdego z pytań, Szybko zrozumiał, dlaczego - w środowisku z setek tysięcy żąda drugi, rozwidlone i kontekst przełączania związane z gwintem zarządzania stają się nadmiernie drogie (widelec jest najgorszy wykonawca, jako wykonuje kopię pamięci w procesie nadrzędnym za każdym razem). Podczas gdy porównanie , ciasna i wysoce zoptymalizowana pętla zdarzeń naprawdę świeci , jeśli chodzi o wydajność pod ciężkimi ładunkami .

+0

Dzięki, zastanawiałem się, co było tak niezwykłego w przypadku architektury select-loop select()/epoll() (coś, co czytałem o yeaaaars temu w książce TCP), i dlaczego może być lepsze niż wątki. –