I server Web non-forking (ovvero a thread singolo o select()
) come lighttpd o nginx sono sempre più popolari.Come funziona un server Web non forking?
Mentre c'è una moltitudine di documenti che spiegano i server di forking (a vari livelli di dettaglio), la documentazione per i server non-forking è scarsa.
Sto cercando un occhi uccello vista come un server non-forking web funziona. (Pseudo-) codice o un diagramma macchina di stato, ridotto al minimo , sarebbe grande.
Sono consapevole delle seguenti risorse e le ho trovate utili.
Tuttavia, io sono interessato a dei principi, non i dettagli di implementazione.
In particolare:
Perché questo tipo di server a volte chiamata non bloccante, quando
select()
essenzialmente blocchi?L'elaborazione di una richiesta può richiedere un po 'di tempo. Cosa succede con le nuove richieste durante questo periodo in cui non ci sono thread o processi specifici del listener? L'elaborazione della richiesta è in qualche modo interrotta o time-sliced?
Edit: A quanto mi risulta, mentre una richiesta viene elaborata (per esempio file letto o script CGI run) il server non può accettare nuove connessioni. Questo non significherebbe che un tale server potrebbe perdere molto di nuove connessioni se uno script CGI viene eseguito per, diciamo, 2 secondi o giù di lì?
Mi piacerebbe pensare che un non-forking web server sarebbe una cattiva partita a qualsiasi server web che ha voluto al server più di una quantità insignificante di contenuto dinamico . – Eddie
@Eddie Non per niente. Con n processori, avere più di n thread non ti permetterà di fare più lavoro. Un server asincrono progettato correttamente può fare tanto lavoro quanto un biforcarsi o uno threaded. –
@Nick Johnson: dipende. Se si hanno N processori e N thread, nella misura in cui una qualsiasi richiesta blocca l'attesa per I/O, non si sta effettivamente utilizzando il processore a meno che non si creino più thread. Ad esempio, se devi andare al database per soddisfare una richiesta dinamica, quel thread viene fermato finché non ottieni una risposta. Con solo N thread, puoi trascorrere la maggior parte del tuo tempo in attesa e solo una piccola parte del tuo tempo viene effettivamente elaborata. – Eddie