Maison >cadre php >Swoole >La différence entre fpm et swoole

La différence entre fpm et swoole

(*-*)浩
(*-*)浩original
2019-12-02 11:46:336578parcourir

La différence entre fpm et swoole

PHP-FPM

Les premières versions de PHP n'avaient pas de serveur WEB intégré, mais fournissaient SAPI (Server API ) Connectez-vous avec des tiers. Le désormais très populaire php-fpm gère la communication entre PHP et les serveurs WEB tiers via le protocole FastCGI. (Apprentissage recommandé : tutoriel vidéo swoole )

Par exemple, la combinaison de Nginx + php-fpm, le fpm exécuté de cette manière est en mode Maître/Travailleur, et démarre un Processus maître à surveiller à partir des requêtes Nginx, puis bifurque plusieurs processus Worker pour gérer les requêtes. Chaque processus Worker ne peut traiter qu'une seule requête. Le cycle de vie d'un seul processus est à peu près le suivant :

Module d'initialisation.

Demande d'initialisation. La requête ici signifie demander à PHP d'exécuter du code, pas une requête HTTP.

Exécutez le script PHP.

Fin de la demande.

Fermez le module.

Swoole adopte également le mode Master/Worker. La différence est que le processus Master a plusieurs threads Reactor. Le Master est simplement un générateur d'événements, chargé de surveiller les changements d'événements du handle Socket. Worker s'exécute de manière multi-processus, reçoit des requêtes des threads Reactor et exécute des fonctions de rappel (écrites en PHP). Le processus de démarrage du processus Master est à peu près le suivant :

Module d'initialisation.

Demande d'initialisation. Étant donné que swoole doit être exécuté via le cli, les variables globales de PHP, telles que $_SERVER, $_POST, $_GET, etc., ne seront pas initialisées lors de l'initialisation de la requête.

Exécutez le script PHP. Y compris l'analyse lexicale et syntaxique, l'initialisation des variables, des fonctions, des classes, etc., le Maître entre dans l'état d'écoute et ne terminera pas le processus.

Le principe de l'accélération Swoole

Le Reactor (la méthode de réutilisation des E/S d'epoll) est chargé de surveiller les changements d'événements du handle de Socket pour résoudre le problème de haute concurrence.

Gagnez du temps lors de l'initialisation du code PHP grâce à la mémoire résidente Lorsque vous utilisez des frameworks volumineux, l'effet d'accélération de l'utilisation de swoole est très évident.

Comparaison des différences

PHP-FPM

Maître processus principal / Mode multi-processus Worker.

Démarrez le maître et écoutez les requêtes transmises depuis Nginx via le protocole FastCGI.

Chaque processus Worker correspond à une seule connexion, qui sert à exécuter du code PHP complet.

Une fois le code PHP exécuté, toute la mémoire occupée sera détruite et la prochaine requête devra être réinitialisée ainsi que d'autres opérations fastidieuses.

Uniquement pour le serveur HTTP.

Swoole

Processus principal maître (composé de plusieurs threads Reactor)/Mode Worker multi-processus (ou multi-thread)

Démarrez Master, initialise le code PHP et le Reactor surveille les changements d'événement du handle Socket.

Le thread principal de Reactor est responsable de l'équilibrage des multi-threads, et le processus Manager gère plusieurs processus Worker, y compris les processus TaskWorker.

Chaque Worker accepte les requêtes de Reactor et n'a besoin que d'exécuter le code PHP dans la partie fonction de rappel.

Le code d'initialisation PHP n'est exécuté qu'une seule fois au démarrage du Maître. Le Maître entre en état d'écoute et ne termine pas le processus.

Non seulement peut être utilisé pour le serveur HTTP, mais peut également établir une connexion TCP et une connexion WebSocket.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn