Que sont la synchronisation, l'asynchrone, le bloquant et le non bloquant en Python ?

王林
Libérer: 2023-04-24 09:37:07
avant
1471 Les gens l'ont consulté

    1. Introduction aux statuts

    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.

    2. Synchronisation et asynchrone

    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.

    3. Bloquant et non bloquant

    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.

    4. Synchrone/asynchrone et bloquant/non bloquant

    1. Formulaire de blocage asynchrone

    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.

    2. Formulaire synchrone non bloquant

    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.

    3. Formulaire asynchrone non bloquant

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    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
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!