Sto cercando di capire cosa rende Nginx così veloce e ho alcune domande.nginx: il suo multithreading ma utilizza più processi?
Come ho capito, Apache genera un nuovo processo per servire ogni richiesta O genera un nuovo thread per servire ogni richiesta. Poiché ogni nuovo thread condivide lo spazio degli indirizzi virtuali, l'utilizzo della memoria continua a salire se ci sono un certo numero di richieste simultanee.
Nginx risolve questo problema con un solo processo di ascolto (Master), con un singolo thread di esecuzione AND 2 o 3 (numero è configurabile) processi di lavoro. Questo processo/thread master sta eseguendo un ciclo di eventi. In attesa di qualsiasi richiesta in arrivo. Quando arriva una richiesta, dà quella richiesta a uno dei processi di lavoro.
favore correggetemi se la mia comprensione di cui sopra non è corretta
Se quanto sopra è corretto, quindi ho un paio di domande:
1.) Non è il processo di lavoro di andare a deporre le uova più thread e andando a correre lo stesso problema di Apache?
2.) O è veloce nginx perché la sua architettura basata sugli eventi utilizza IO non bloccante al di sotto di tutto. Forse il processo di lavoro genera thread che fanno solo non-blocking-IO, è così?
3.) Che "esattamente" è "architettura basata su eventi", qualcuno può davvero semplificarlo, perché soemone come me capire. Riguarda solo il non-blocco-io o qualcos'altro?
Ho ottenuto un riferimento di c10k, sto provando ad analizzarlo, ma non penso sia relativo all'archivio basato sugli eventi. sembra più per IO non bloccante.
L'I/O non bloccante richiede un'architettura basata su eventi. –
FYI - Nel caso tu sia interessato a scavare più a fondo - ho scritto la risposta con altri materiali + video qui: http://planetunknown.blogspot.com/2011/02/why-nginx-is-faster- than-apache.html – PlanetUnknown