Perché un servlet è più efficiente di CGI?

1

Ho fatto qualche ricerca sui servlet di Java e ho difficoltà a capire perché è più efficiente di una soluzione basata su cgi.

Il motivo della mia mancanza di comprensione è che i servlet java girano sul modello thread per richiesta, il che significa che un nuovo thread viene generato o prelevato da un pool di thread ogni volta che viene effettuata una richiesta. Mentre una soluzione basata su cgi creerebbe un nuovo processo per richiesta.

La mia domanda è, perché creare un processo per richiesta è meno efficiente di un thread, dopotutto in ogni processo è un thread che fa il lavoro, quindi perché cgi è meno efficiente?

    
posta SteelToe 22.01.2017 - 01:42
fonte

1 risposta

6

I servlet java hanno prestazioni migliori di cgi a causa di diversi motivi. Alcuni che vengono in mente:

  1. I programmi cgi in genere hanno molto più inizializzazione da fare all'avvio di quanto non debba fare una servlet per gestire una richiesta. In uno scenario non ottimizzato deve essere avviata un'intera VM Java, deve caricare classi, trasformare il bytecode in codice macchina, ecc.

  2. Avviare un processo è molto più costoso dell'avvio di un thread in qualsiasi sistema operativo di cui abbia mai sentito parlare.

  3. Anche se l'avvio di un processo era economico come avviare un thread, tuttavia, recuperare un thread esistente da un pool di thread è molto, molto, molto più efficiente dell'avvio di un nuovo thread.

  4. Quando un programma cgi termina, tutto il suo stato viene perso, quindi quando arriva la richiesta successiva, questo stato deve essere ricostruito, (anche se è solo configurazione,) che di solito significa caricato dal disco. I servlet possono conservare lo stato importante in memoria che viene riutilizzato tra le richieste.

risposta data 22.01.2017 - 01:49
fonte

Leggi altre domande sui tag