2010-10-01 13 views
1

J'ai eu un argument aujourd'hui avec un de mes professeurs où il disait que CGI était toujours plus lent que Servlet. Je lui ai dit que la performance était subjective et dans certains cas, CGI pourrait mieux performer que Servlet. Il a insisté pour obtenir un exemple de quand CGI pourrait être plus rapide que Servlet. Je veux juste savoir quelle serait la chose la plus solide que je pourrais trouver pour contrer le "Servlet est toujours plus rapide que CGI".Dans quelle situation CGI peut-il être plus rapide que Servlet?

+0

Vous aimez vraiment l'argumentation. Votre professeur a probablement raison dans l'essence. Néanmoins, je devrais vous donner le crédit d'être prudent sur le mot «toujours». – gawi

+0

Si vous prenez "CGI" pour signifier "exécuter un script [Perl | Python | quelquechose]" alors il a raison: la servlet sera généralement effectuée avant même que l'interpréteur ne démarre. Si vous voulez dire "exécuter un binaire", vous pouvez certainement trouver des exemples comme Charlie Martin ci-dessous, où un morceau de C pré-compilé se chargera et fonctionnera très rapidement, peut-être plus rapidement que le servlet. Mais vous divisez les poils à ce moment-là. Pourtant, votre professeur devrait savoir mieux que d'utiliser le mot «toujours»;) –

+0

Ce sujet peut aider à mieux comprendre CGI: [Je n'ai jamais vraiment compris: qu'est-ce que CGI?] (Http://stackoverflow.com/questions/2089271/je-jamais-vraiment-compris-quoi-est-CGI) – BalusC

Répondre

0

Les performances ne sont pas subjectives. Allez chercher le mot. Maintenant, pour répondre à votre question, un CGI sera plus rapide qu'une servlet quand le temps d'exécution du code Java de la servlet est assez long pour que le temps nécessaire pour charger et exécuter le programme CGI soit dominé par le temps que Java programme s'exécute. Ainsi, par exemple, si vous aviez un programme CGI en C qui avait

main(){ return; } 

et vous compariez qu'avec un servlet, il pourrait bien être plus rapide. Ce que vous voulez faire est de mettre en place un conteneur de servlet et un répertoire CGI et de surveiller et de mesurer certaines performances comparatives.

+0

Je doute que même cela serait plus rapide. Vous devez fork() et exec(). Comparez cela au traitement d'une requête sur un thread qui est probablement déjà généré. Peut-être que FastCGI pourrait gagner dans certains cas, mais pas simplement CGI. – gawi

+0

Cela dépend vraiment de l'installation. Comme vous le dites, fork/exec peut faire la différence, mais alors vous pouvez aussi lancer fastCGI pour que le temps fork./exec soit éliminé. Dans l'autre sens, si la JVM doit échanger quelque chose de significatif pour gérer la requête, cela pourrait prendre beaucoup plus de temps que fork/exec. Le fait est que ** la performance n'est pas subjective **. Si vous voulez savoir lequel est le plus rapide, * mesurez *. –

2

6 ans plus tard .... Peut-être que vous pouvez envoyer votre professeur ceci:

« En moyenne, la version de PHP est plus rapide que la version ASP, tandis que la version CGI (C++) est plus de 10 fois plus rapide que PHP et ASP. " (http://www.wrensoft.com/zoom/benchmarks.html)

Fondamentalement, les performances CGI varient en fonction du langage que vous l'implémentez et je doute qu'une servlet s'exécute plus rapidement qu'un C++ CGI faisant la même chose. Encore plus sous stress, lorsque la consommation de ressources joue un grand rôle. Demandez à votre enseignant pourquoi Facebook compile PHP en un équivalent C++, ou pourquoi Google et Amazon utilisent C++ sur leurs implémentations.

Les gens parlent de la surcharge fork() exec() mais ne reconnaissent pas que JVM fait la même chose en interne. En passant, JVM est écrit en C/C++.