Quali sono alcune delle principali differenze nella gestione dei processi tra CGI e le nuove (migliori) tecnologie? [chiuso]

4

So che CGI genera un nuovo processo per ogni richiesta HTTP che serve, mentre i servlet usano un processo Java per soddisfare molte richieste. Che cosa fanno le altre tecnologie (rotaie, WSGI / django, mod_php, asp.net ecc.) In modo che i server web non debbano generare una nuova richiesta HTTP per un nuovo processo?

    
posta rdasxy 07.04.2012 - 04:39
fonte

2 risposte

1

Generalmente i server

1) Utilizza un pool di thread con un thread per richiesta di connessione client, potenzialmente con un pool separato di thread / processi separati per gestire il codice "application" (in contrasto con le basi della gestione di un HTTP richiesta. Un thread gestisce ogni richiesta dall'inizio alla fine, spesso il pooling dei thread viene utilizzato per ridurre la quantità di avvio e di rimozione richiesta per ciascuna connessione.

Oppure, 2) useranno un modello basato sugli eventi che consente a un singolo thread / processo di gestire molte connessioni. In questo caso, ciascuno degli "eventi", come una nuova connessione o un nuovo pacchetto ricevuto, entrerà in una sorta di coda per essere elaborata da uno o un piccolo numero di thread. Questo è un modo molto efficiente per ridimensionare se è possibile limitare la quantità di lavoro da svolgere elaborando ogni evento (altrimenti piccole richieste rapide verranno accodate dietro richieste più grandi).

La principale differenza per quanto riguarda i risultati è che entrambi questi modelli evitano o minimizzano i costi generali del tempo di avvio del processo e della comunicazione tra processi e handoff.

    
risposta data 22.05.2012 - 00:30
fonte
1

In generale, ciò che accade è che i pool pooling thread per supportare più connessioni. Una volta rilasciata la connessione, il thread viene restituito al pool per essere utilizzato dalla connessione successiva. Ora i dettagli di questo sono diversi per la maggior parte delle cose. Pensando a cosa succede per far funzionare bene questo sistema, i sistemi apriranno un processo e lo riutilizzeranno per gestire più richieste una volta restituito al pool.

I server di applicazioni in bundle all'interno del server Web (ASP.NET, Tomcat) non devono preoccuparsi di eseguire processi esterni perché si basano sul presupposto che il codice gestirà correttamente il threading. Ad esempio, quando si parla di Ruby on Rails, la maggior parte delle cose non è thread-safe. Riutilizzare all'interno dello stesso processo probabilmente porterà a risultati indesiderati. (Per i binari, almeno su JRuby, questo probabilmente meno del problema che era una volta.)

    
risposta data 18.05.2012 - 14:20
fonte

Leggi altre domande sui tag