recherche
Maisoncadre phpWorkermanPlusieurs concepts à connaître dans Workerman

La colonne suivante du tutoriel d'utilisation de Workerman vous présentera plusieurs concepts que vous devez connaître sur Workerman. J'espère qu'il sera utile à vos amis dans le besoin !

Plusieurs concepts à connaître dans Workerman

Workerman est un framework de service de socket PHP open source et hautes performances développé uniquement en PHP. Il ne s'agit pas d'un framework MVC, mais d'un framework de services socket de niveau inférieur et plus général. Vous pouvez l'utiliser pour développer des agents TCP, des agents à relais, des serveurs de jeux, des serveurs de messagerie et des serveurs FTP.

Recommandé : Tutoriel Workerman

En fait, Workerman est similaire à une version PHP de nginx, et le noyau est également multi-processus + Epoll + IO non bloquant . Chaque processus Workerman peut maintenir des dizaines de milliers de connexions simultanées. Parce qu'il réside en mémoire, il ne repose pas sur des conteneurs tels qu'Apache, nginx et php-fpm et offre des performances ultra élevées.

Prend en charge TCP, UDP, UNIXSOCKET en même temps, prend en charge les connexions longues, prend en charge Websocket, HTTP, WSS, HTTPS et d'autres protocoles de communication ainsi que divers protocoles personnalisés. Il comporte de nombreux composants hautes performances tels que des minuteries, des clients socket asynchrones, Mysql asynchrone, Redis asynchrone, HTTP asynchrone et des files d'attente de messages asynchrones.

Tout d'abord, vous devez comprendre quelques concepts de base, 1. Multi-processus 2. Epoll 3. IO non bloquantes

1. Multi-processus :

Tout d'abord, qu'est-ce qu'un processus ? Un processus comprend du code, des données et des ressources (mémoire) allouées au processus. Intuitivement, un processus est un PID dans un système informatique. . Le système d'exploitation protège l'espace des processus des interférences des processus externes, c'est-à-dire qu'un processus ne peut pas accéder à la mémoire d'un autre processus.

Parfois, il est nécessaire de communiquer entre les processus. Dans ce cas, le système d'exploitation peut être utilisé pour fournir un mécanisme de communication inter-processus. Normalement, lorsque vous exécutez un fichier exécutable, le système d'exploitation crée un processus pour qu'il s'exécute.

Mais si le fichier d'exécution est basé sur une conception multi-processus, le système d'exploitation créera plusieurs processus sur le processus d'origine. Le code exécuté entre ces processus est le même, mais les résultats de l'exécution peuvent être les mêmes. .C'est peut-être différent.

Pourquoi avons-nous besoin de plusieurs processus ? L'idée la plus intuitive est que si le système d'exploitation prend en charge le multicœur, alors un fichier exécutable peut s'exécuter sur différents cœurs même s'il n'est pas multicœur, pendant qu'un processus attend des opérations d'E/S, un autre ; Le processus peut également s'exécuter sur le processeur. Exécutez-le pour améliorer l'utilisation du processeur et l'efficacité du programme.

Sur les systèmes Linux, vous pouvez utiliser fork() pour créer un processus enfant dans le processus parent. Après qu'un processus ait appelé fork(), le système allouera d'abord des ressources au nouveau processus, telles que les données de stockage et l'espace de code. Ensuite, toutes les valeurs et l'état du processus d'origine sont copiés dans le nouveau processus. Seules quelques valeurs sont différentes du processus d'origine pour distinguer les différents processus.

La fonction fork() reviendra deux fois, une fois au processus parent (renvoyant le pid du processus enfant ou les informations d'échec du fork) et une fois au processus enfant (renvoyant 0). À ce stade, les deux processus se sont séparés et chacun s’est exécuté dans le système.

2. IO non bloquantes :

Tout d'abord, qu'est-ce que l'IO, c'est-à-dire le fonctionnement de l'entrée et de la sortie. L'essence du réseau IO est la lecture du socket. Socket est abstrait comme un flux dans le système Linux, et IO peut être compris comme une opération de convection. Pour un accès IO (prenons la lecture comme exemple), les données seront d'abord copiées dans le tampon du noyau du système d'exploitation, puis copiées du tampon du noyau du système d'exploitation vers l'espace d'adressage du programme d'application.

Ainsi, lorsqu'une opération de lecture se produit, elle passera par deux étapes :

La première étape (attente des données) : En attente que les données soient prêtes (En attente que les données soient prêtes prêt).

La deuxième étape (copie des données) : Copie des données du noyau vers le processus (Copie des données du noyau vers le processus)

Pour le flux de socket (c'est-à-dire IO),

Étape 1 : implique généralement d'attendre qu'un paquet de données arrive sur le réseau, puis soit copié dans un tampon du noyau.

Étape 2 : Copiez les données du tampon du noyau vers le tampon du processus d'application.

Les modèles d'IO réseau sont à peu près les suivants :

IO synchrone)

Blocage d'IO (blocage d'IO) IO ) la ressource est indisponible, la requête IO est bloquée jusqu'au résultat du retour (données ou timeout). Sous Linux, toutes les sockets sont bloquées par défaut. La caractéristique du blocage des IO est qu'elles sont bloquées dans les deux étapes de l'exécution des IO (attente des données et copie des données).

Lorsque les ressources IO non bloquantes (IO non bloquantes) ne sont pas disponibles, la requête IO part et revient, et les données de retour indiquent que la ressource n'est pas disponible. Sous Linux, si les données ne sont pas prêtes, elles ne bloqueront pas le processus utilisateur et le noyau reviendra immédiatement au processus, indiquant que cette commande ne peut pas être satisfaite immédiatement (EAGAIN ou EWOULDBLOCK). Par conséquent, le non-blocage est obtenu grâce à l'interrogation.

Multiplexage IO (multiplexage IO) Le multiplexage IO est ce que nous appelons select, poll et epoll. Dans certains endroits, cette méthode IO est également appelée IO pilotée par événement. L'avantage de select/epoll est qu'un seul processus peut gérer les E/S de plusieurs connexions réseau en même temps.

Son principe de base est que les fonctions select, poll et epoll interrogeront en permanence toutes les sockets dont elles sont responsables. Lorsque les données arrivent dans une certaine socket, le processus utilisateur en sera informé. Dans le modèle de multiplexage IO, en pratique, chaque socket est généralement réglé sur non bloquant.

Cependant, l’ensemble du processus utilisateur est en réalité bloqué en permanence. C'est juste que le processus est bloqué par la fonction select au lieu d'être bloqué par le socket IO. Par conséquent, le multiplexage des E/S est bloqué sur les appels système tels que select et epoll, mais pas sur les appels système d'E/S réels tels que recvfrom.

IO pilotée par signal (IO pilotée par signal)

IO asynchrone (IO asynchrone) Une fois que le processus utilisateur a lancé l'opération de lecture, il peut immédiatement commencer à faire autre chose . D'un autre côté, du point de vue du noyau, lorsqu'il reçoit une lecture asynchrone, elle reviendra immédiatement, cela ne provoquera donc aucun blocage du processus utilisateur.

Ensuite, le noyau attendra que la préparation des données soit terminée, puis copiera les données dans la mémoire utilisateur. Lorsque tout cela sera terminé, le noyau enverra un signal au processus utilisateur pour lui dire que. l'opération de lecture est terminée.

3. Epoll  : epoll est facile à comprendre maintenant. epoll est un sondage amélioré réalisé par le noyau Linux pour gérer de gros lots de descripteurs de fichiers. version améliorée de l'interface select/poll, qui peut améliorer considérablement l'utilisation du processeur système du programme lorsque seul un petit nombre de connexions actives sont actives parmi un grand nombre de connexions simultanées.

PS. Plusieurs points à noter :

1 : Le multiplexage des E/S est-il un modèle de blocage synchrone ou un modèle de blocage asynchrone ?

La synchronisation nécessite d'attendre activement les notifications de messages, tandis que l'asynchrone nécessite de recevoir passivement des notifications de messages et d'obtenir passivement des messages via des rappels, des notifications, un statut, etc. Lorsque le multiplexage IO bloque l'étape de sélection, le processus utilisateur attend activement et appelle la fonction de sélection pour obtenir le message d'état de données prêtes, et son état de processus est bloqué. Par conséquent, le multiplexage IO est classé comme mode de blocage synchrone.

2 : Qu'est-ce que la simultanéité élevée ?

Les programmes hautement concurrents utilisent généralement la méthode synchrone non bloquante plutôt que la méthode multi-threading + blocage synchrone. Pour comprendre cela, regardez d’abord la différence entre la concurrence et le parallélisme. C'est-à-dire que le nombre de concurrence fait référence au nombre de tâches exécutées en même temps (comme les requêtes HTTP traitées en même temps), tandis que le nombre de parallélisme est le nombre de ressources physiques pouvant fonctionner simultanément ( comme le nombre de cœurs de processeur).

En planifiant correctement les différentes étapes des tâches, le nombre de simultanéités peut être bien supérieur au degré de parallélisme. C'est le secret pour lequel quelques processeurs peuvent prendre en charge des dizaines de milliers de requêtes simultanées d'utilisateurs. Dans cette situation de forte concurrence, la création d’un processus ou d’un thread pour chaque tâche (demande de l’utilisateur) coûte très cher. La méthode synchrone non bloquante peut lancer plusieurs requêtes IO en arrière-plan, ce qui peut servir un grand nombre de requêtes IO simultanées en un seul processus.

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
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Quelles sont les principales fonctionnalités du client WebSocket intégré de Workerman?Quelles sont les principales fonctionnalités du client WebSocket intégré de Workerman?Mar 18, 2025 pm 04:20 PM

Le client WebSocket de Workerman améliore la communication en temps réel avec des fonctionnalités telles que la communication asynchrone, les performances élevées, l'évolutivité et la sécurité, s'intégrant facilement aux systèmes existants.

Comment utiliser Workerman pour créer des outils de collaboration en temps réel?Comment utiliser Workerman pour créer des outils de collaboration en temps réel?Mar 18, 2025 pm 04:15 PM

L'article traite de l'utilisation de Workerman, un serveur PHP haute performance, pour créer des outils de collaboration en temps réel. Il couvre l'installation, la configuration du serveur, la mise en œuvre des fonctionnalités en temps réel et l'intégration avec les systèmes existants, mettant l'accent sur

Quelles sont les meilleures façons d'optimiser le Workerman pour les applications à faible latence?Quelles sont les meilleures façons d'optimiser le Workerman pour les applications à faible latence?Mar 18, 2025 pm 04:14 PM

L'article traite de l'optimisation de Workerman pour les applications à faible latence, en se concentrant sur la programmation asynchrone, la configuration du réseau, la gestion des ressources, la minimisation du transfert de données, l'équilibrage de charge et les mises à jour régulières.

Comment implémenter la synchronisation des données en temps réel avec Workerman et MySQL?Comment implémenter la synchronisation des données en temps réel avec Workerman et MySQL?Mar 18, 2025 pm 04:13 PM

L'article discute de la mise en œuvre de la synchronisation des données en temps réel à l'aide de Workerman et MySQL, en se concentrant sur la configuration, les meilleures pratiques, en assurant la cohérence des données et en relevant des défis communs.

Quelles sont les principales considérations pour utiliser Workerman dans une architecture sans serveur?Quelles sont les principales considérations pour utiliser Workerman dans une architecture sans serveur?Mar 18, 2025 pm 04:12 PM

L'article discute de l'intégration de Workerman dans des architectures sans serveur, en se concentrant sur l'évolutivité, l'apatritude, les démarrages à froid, la gestion des ressources et la complexité d'intégration. Workerman améliore les performances grâce à une concurrence élevée, réduite à froid STA

Comment construire une plate-forme de commerce électronique haute performance avec Workerman?Comment construire une plate-forme de commerce électronique haute performance avec Workerman?Mar 18, 2025 pm 04:11 PM

L'article discute de la création d'une plate-forme de commerce électronique haute performance à l'aide de Workerman, en se concentrant sur ses fonctionnalités telles que la prise en charge et l'évolutivité de WebSocket pour améliorer les interactions et l'efficacité en temps réel.

Quelles sont les fonctionnalités avancées du serveur WebSocket de Workerman?Quelles sont les fonctionnalités avancées du serveur WebSocket de Workerman?Mar 18, 2025 pm 04:08 PM

Le serveur WebSocket de Workerman améliore la communication en temps réel avec des fonctionnalités telles que l'évolutivité, la faible latence et les mesures de sécurité par rapport aux menaces communes.

Comment utiliser Workerman pour construire des tableaux de bord analytiques en temps réel?Comment utiliser Workerman pour construire des tableaux de bord analytiques en temps réel?Mar 18, 2025 pm 04:07 PM

L'article traite de l'utilisation de Workerman, un serveur PHP haute performance, pour créer des tableaux de bord analytiques en temps réel. Il couvre l'installation, la configuration du serveur, le traitement des données et l'intégration frontale avec des cadres comme React, Vue.js et Angular. Feat clé

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.