Avant de comprendre d'autres concepts, nous devons d'abord comprendre plusieurs états du processus. Pendant l'exécution du programme, grâce au contrôle de l'algorithme de planification du système d'exploitation, le programme entrera dans plusieurs états : prêt, en cours d'exécution et bloqué.
État Prêt (Prêt) : lorsque le processus a reçu toutes les ressources nécessaires à l'exception du CPU, il peut être exécuté immédiatement tant qu'il obtient le processeur. L'état du processus à ce moment est appelé l'état prêt.
État d'exécution/exécution (Running) Lorsque le processus a obtenu un processeur et que son programme est en cours d'exécution sur le processeur, l'état du processus à ce moment est appelé état d'exécution.
Un processus qui s'exécute dans l'état Bloqué abandonnera le processeur et sera dans un état bloqué lorsqu'il ne pourra pas être exécuté car il attend qu'un événement se produise. Il peut y avoir de nombreux types d'événements provoquant un blocage du processus, tels que l'attente de la fin des E/S, le tampon d'application non satisfait, l'attente de lettres (signaux), etc.
Ce qu'on appelle asynchrone signifie que vous n'avez pas besoin d'attendre que la tâche dépendante soit terminée, mais informez uniquement la tâche dépendante du travail à terminer, et la tâche dépendante sera exécutée immédiatement. Tant que vous terminez la tâche entière, elle sera terminée. Quant à savoir si la tâche dépendante est réellement terminée à la fin, la tâche qui en dépend ne peut pas être déterminée, il s'agit donc d'une séquence de tâches peu fiable.
Exemple
La première option : choisir de faire la queue
La deuxième option : choisir de prendre un petit morceau de papier avec mon numéro dessus, et lorsque mon numéro est atteint, la personne au le comptoir m'informera de mon tour. Il est temps pour moi de m'occuper des affaires
Le premier type : le premier (faire la queue) consiste à attendre simultanément la notification du message, c'est-à-dire que je dois attendre que la banque le fasse ; gérer les affaires ;
Le deuxième type : ce dernier (attendre la notification des autres) consiste à attendre la notification du message de manière asynchrone. Dans le traitement asynchrone des messages, la personne qui attend la notification du message (dans ce cas, la personne en attente pour gérer l'affaire) enregistre souvent un mécanisme de rappel. Lorsque l'événement attendu est déclenché, le mécanisme déclencheur (dans ce cas, la personne au niveau de l'événement). compteur) transmet une sorte de mécanisme de rappel. Le mécanisme (dans ce cas, un numéro écrit sur un petit morceau de papier, appelé numéro) trouve la personne qui attend l'événement.
Exemple
Continuez avec l'exemple ci-dessus, qu'il s'agisse de faire la queue ou d'utiliser un numéro pour attendre les notifications, si pendant le processus d'attente, le serveur ne peut rien faire d'autre que d'attendre les notifications de message. , Ensuite, le mécanisme se bloque, ce qui se reflète dans le programme, c'est-à-dire que le programme a été bloqué lors de l'appel de fonction et ne peut pas continuer à s'exécuter.
Au contraire, certaines personnes aiment attendre en passant des appels et en envoyant des SMS lors de la gestion de ces services à la banque. Cet état est non bloquant, car il (le serveur) n'est pas bloqué sur cette notification de message, mais attend. sur la notification du message. Faites votre propre truc et attendez.
Remarque : Le formulaire synchrone non bloquant est en réalité inefficace. Imaginez que vous parlez au téléphone et que vous devez lever les yeux pour voir si la file d'attente vous atteint. Si passer un appel et observer la position de la file d'attente sont considérés comme deux opérations du programme, le programme doit basculer entre ces deux comportements différents, ce qui est évidemment inefficace ; car passer un appel est votre affaire (le serveur), et vous avertir est l'affaire du compteur (mécanisme de déclenchement de message), et le programme ne bascule pas entre deux opérations différentes.
Si la personne en attente de gestion des affaires à la banque utilise une méthode asynchrone pour attendre que le message soit déclenché (notifié), c'est-à-dire , il a reçu un petit billet, s'il ne peut pas quitter la banque pour faire autre chose pendant cette période, alors il est évident que cette personne est bloquée dans cette opération d'attente.
Les opérations asynchrones peuvent être bloquées, mais elles ne sont pas bloquées lors du traitement du message, mais sont bloquées en attendant la notification du message.
Imaginez que vous passez un appel téléphonique et que vous devez lever les yeux pour voir si la file d'attente vous a atteint si passer un appel et observer la position de la file d'attente sont considérés comme deux opérations du programme. , ce Le programme doit basculer entre ces deux comportements différents, et l'efficacité est peut-être faible.
Parce qu'appeler est l'affaire de votre (serveur) et que vous avertir est l'affaire du compteur (mécanisme de déclenchement de message), le programme ne bascule pas entre deux opérations différentes.
Par exemple, cette personne se rend soudain compte qu'elle est accro à la cigarette et qu'elle a besoin de sortir fumer une cigarette, alors elle dit au responsable du lobby que lorsque son numéro est atteint, s'il te plaît, sors et préviens-moi, afin qu'il ne soit pas bloqué en attente ici. Dans l'opération ci-dessus, il s'agit naturellement d'une méthode asynchrone + non bloquante.
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!