J'ai examiné les sources de FastCGI (FCGI-2.4.0) et il n'y a aucun signe de fourchette. Si je corrige le serveur Web SPWANS, un processus de module FastCGI (compilé ou chargé sous forme de SO / DLL) et gère le contrôle de la prise principale (le port TCP: 80 habituellement). P>
ON * NIX Le module FastCGI "Verrouille" Cette prise à l'aide d'un verrouillage d'écriture de fichier (LibfCGI / OS_UNIX.c: 989) sur l'ensemble du descripteur de fichier (la prise d'écoute en effet); De cette façon, lorsque le nouveau résultat des connexions, seul le module FastCGI est capable de les traiter. Le verrouillage de la prise entrant est libéré juste avant de remettre au traitement HTTP Req. P>
Comme le montre le module FastCGI n'est pas multi-processus / thread (no interne em> utilisation de la fourchette / pthread_create) Je suppose que la manipulation simultanée de plusieurs connexions simultanées est obtenue via SPWANING à partir du serveur Web (via OS_SPEWNCHILD ) des processus de module N FastCGI.
Si nous reprochions, comme exemple, 3 processus FastCGI (Apache appelle 3 x os_spawnchild), cela signifie-t-il que nous n'avons que 3 demandes maximum 3 servies simultanément? P>
a) est ma vision de la méthode FastCGI de fonctionner correctement? P>
b) Si le coût du système d'exploitation a généré un nouveau processus / créer une connexion à la DB locale pourrait être considéré comme négligeable, quels sont les avantages de FastCGI contre une approche exécutable EM> ancienne EM>? p>
merci,
EMA! : -) p>
4 Réponses :
Les processus de pattes FastCGI sont persistants, ils ne sont pas tués une fois la demande manipulée, elles sont plutôt "communes". P>
Arul, merci, mais je suis déjà maintenant ceci ... je demandais des réponses plus spécifiques (A, B). Acclamations,
Le gain de vitesse de FastCGI sur CGI normal est que les processus sont persistants. par exemple. Si vous avez des poignées de base de données à ouvrir, vous pouvez les faire une fois. Idem pour toute mise en cache. p>
Le gain principal vient de ne pas avoir à créer une nouvelle PHP / Perl / etc. interprète à chaque fois, qui prend une quantité de temps surprenante. P>
Si vous vouliez avoir plusieurs connexions simultanées traitées, vous devez avoir plusieurs processus processus FastCGI en cours d'exécution. FastCGI n'est pas un moyen de manipuler plus de connexions à travers une sorte de simultanéité spéciale. C'est un moyen d'accélérer les demandes individuelles, ce qui permettra de manipuler plus de demandes. Mais oui, vous avez raison, des demandes plus concurrentes nécessitent davantage de processus fonctionnant. P>
Pas vrai; FastCGI permet de manipuler plusieurs demandes simultanées avec un seul fil i>. C'est littéralement le plus grand avantage pour FastCGI, avec des connexions de longue durée menées au petit gain si elles n'impliquent pas le multiplexage .
En effet, p>
de sorte que voir (a) est ok, maintenant qu'en est-il (b)?
Si je parle d'exécutables (des programmes C / C ++ correctement compilés, non des scripts tels que Perl / PHP / ...), et si nous considérons le processus SPWAN COÛT et DB New Connection Coûts négligeables, alors cette approche (FastCGI) est juste un sorte de petit gain em> comparé aux exécutables ordinaires CGI? p>
Je veux dire, étant donné que Linux est très rapide dans le frai (forking) un processus et si le DB fonctionne localement (par exemple. Même hôte MySQL), le temps nécessaire pour démarrer un nouvel exécutable et se connecter à la DB est pratiquement 0. Dans ce cas, sans rien à interpréter, seuls les modules Apache C / C ++ seraient plus rapides que cela. P>
Utilisation de l'approche FastCGI, alors vous êtes encore plus vulnérable aux fuites de MEM comme que le processus n'est pas fourchu / redémarré à chaque fois ... À ce stade, si vous devez développer votre CGI en C / C ++. Soyez préférable d'utiliser EM> Modules CGI et / ou Apache C / C ++ directement? P>
Encore une fois, je ne parle pas de scripts (Perl / PHP / ...), je parle de CGI compilé. P>
Merci encore,
Bravo, ema! : -) p>
Le coût de la fourche ne concerne qu'une partie de la course à PHP via CGI. Une fois que le processus est fourchu, vous devez toujours charger l'exécutable PHP en mémoire et faire ce qui est demandé à l'initialisation au démarrage. Ouverture également une nouvelle connexion à la base de données est beaucoup plus chère que la réutilisation et l'existence.
Les gars, merci pour les réponses, mais je ne parle pas de scripts Perl / PHP, mais à propos des exécutables compilés (Code source C ++ compilé contre la bibliothèque CGICC par exemple) ... Je ne sais pas comment l'écrire plus clairement. ..
Absolument pas; FastCGI peut prendre en charge le multiplexage, ce qui signifie qu'il peut gérer une multitude de connexions à la fois. Si elle est correctement programmée, cela signifie que vous pouvez former un pipeline, où de nouvelles connexions ne sont jamais affichées par l'ouverture de la connexion de base de données, qui ne retardent jamais les résultats de retour immédiatement i> à partir de requêtes de base de données. La latence moyenne de votre module FastCGI peut être Les commandes de grandeur inférieures à cgi b>.
B, oui si le coût du frai est zéro puis legacy cgi serait plutôt bon. Donc, si vous n'avez pas beaucoup de succès, la vieille CGI, c'est bien, courez avec elle. Le point de Fast CGI fait des choses qui bénéficient de beaucoup de stockage persistant, ou de structures qui doivent être construites avant de pouvoir effectuer votre travail, comme l'exécution de requêtes contre de grandes bases de données, où vous souhaitez laisser les bibliothèques DB à la place de la mémoire. d'avoir à recharger tout le shebang à chaque fois que vous souhaitez exécuter une requête. p>
Cela compte quand vous avez beaucoup de hits. p>
Faux; CGI ne peut pas mettre en cache, ce qui signifie que tout stockage doit être rechargé (l'accès à une base de données peut facilement être plus lent qu'un simple chargement de programme C). CGI ne peut pas non plus être multiplex (ce qui signifie être en concurrence dont vous avez besoin de processus multiples). Ces deux avantages sont de loin plus importants que le coût du frai; En outre, il est Fondamentalement, aucun coût de programmation pour faire fonctionner un module CGI avec FastCGI, et avec un code soigné, il est trivial de faire une charge de module FastCGI correctement en tant que CGI ou FastCGI