Table des matières
Multi-tâches (parallèle et simultanéité)
La concurrence
Parallesim
La différence entre le parallélisme et la concurrence
Coroutine
Maison développement back-end tutoriel php Explication détaillée de la coroutine php (avec exemples)

Explication détaillée de la coroutine php (avec exemples)

Sep 20, 2018 pm 05:41 PM
coroutine php 协程 异步

Cet article vous apporte une explication détaillée des coroutines PHP (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Multi-tâches (parallèle et simultanéité)

Avant de parler de coroutines, parlons de multi-processus, multi-threads, de parallélisme et de concurrence.

Pour les processeurs monocœur, le principe du multitâche multi-processus est de laisser le système d'exploitation allouer une certaine tranche de temps CPU à une tâche à chaque fois, puis de l'interrompre, de laisser la tâche suivante exécuter une certaine tranche de temps, puis interrompre à nouveau et passer au suivant, et ainsi de suite.

Le changement de tâche d'exécution étant très rapide, cela donne aux utilisateurs externes l'impression que plusieurs tâches sont exécutées en même temps.

La planification multi-processus est implémentée par le système d'exploitation. Le processus lui-même ne peut pas contrôler le moment où il est planifié. En d'autres termes : 进程的调度 est implémenté par la couche externe 调度器抢占式

Le. La coroutine nécessite que la tâche en cours d'exécution redonne automatiquement le contrôle au planificateur afin que les autres tâches puissent continuer à s'exécuter. C'est exactement le contraire du multitâche de 抢占式. Le planificateur qui anticipe le multitâche peut interrompre de force les tâches en cours, quelles que soient ses propres intentions. Si seulement le programme cédait automatiquement le contrôle, il serait facile pour un programme malveillant d'occuper tout le temps CPU sans le partager avec d'autres tâches.

La planification de la coroutine est implémentée par la coroutine elle-même 主动 cédant le contrôle au planificateur externe

Pour revenir à l'exemple du générateur implémentant la fonction xrange, l'ensemble du processus d'exécution L'alternance peut être représentée par la figure suivante :

la coroutine peut être comprise comme 纯用户态的线程, et le changement de tâche est effectué via 协作 au lieu de préemption.

Par rapport aux processus ou aux threads, toutes les opérations des coroutines peuvent être effectuées en mode utilisateur au lieu du mode noyau du système d'exploitation, et le coût de création et de commutation est très faible.

Pour faire simple 协程 consiste à fournir une méthode pour interrompre l'exécution de la tâche en cours, enregistrer les variables locales actuelles et restaurer les variables locales actuelles pour continuer l'exécution la prochaine fois.

Nous pouvons diviser la grande tâche en plusieurs petites tâches et les exécuter à tour de rôle. S'il y a une petite tâche en attente d'E/S système, ignorez-la et exécutez la petite tâche suivante. et-vient pour réaliser les IO. L'exécution parallèle des opérations et des calculs CPU améliore généralement l'efficacité d'exécution des tâches, ce qui est le sens des coroutines

Multi-threads
Sous un seul cœur, les multi-threads doivent être concurrent;
Cependant, le multithreading actuel des processus unifiés peut s'exécuter sur des processeurs multicœurs, il peut donc être parallélisé

La concurrence

fait référence à la capacité de gérer plusieurs activités simultanées , les événements simultanés ne doivent pas nécessairement se produire au même moment.

Parallesim

fait référence à deux événements simultanés qui se produisent en même temps, ce qui signifie concurrence, mais la concurrence n'est pas nécessairement parallèle.
Plusieurs opérations peuvent être effectuées sur des périodes qui se chevauchent.

La différence entre le parallélisme et la concurrence

并发 fait référence à la structure du programme, 并行 fait référence à l'état du programme lorsqu'il est en cours d'exécution
并行 doit être simultané, 并行C'est un type de 并发 conception
Un seul thread ne peut jamais atteindre l'état 并行

Coroutine

Le support de Coroutine est ajouté en fonction de 生成器 Une fonction qui peut renvoyer des données au générateur (l'appelant envoie des données à la fonction générateur appelée
Cela transforme la communication unidirectionnelle du générateur vers l'appelant en une communication bidirectionnelle entre les deux Nous avons déjà parlé de la méthode d'envoi dans le dernier article. Comprenons la coroutine

code synchrone

Avant que le code d'exécution asynchrone ne soit impliqué, notre code ressemble à ceci

function printNum($max, $caller)
{
    for ($i=0; $i<$max; $i++ ) {
        echo "调度者:" . $caller . "  打印:" . $i . PHP_EOL;
    }
}

printNum(3, "caller1");
printNum(3, "caller2");

# output
调度者:caller1  打印:0
调度者:caller1  打印:1
调度者:caller1  打印:2
调度者:caller2  打印:0
调度者:caller2  打印:1
调度者:caller2  打印:2
Copier après la connexion
Code amélioré après utilisation des coroutines

Premier brouillon, ajustement manuel de l'exécution du générateur

# 本代码手动调整了进程执行代码的顺序,当然本代码实现不用协程也可以,只是利用本流程说明协程作用
# 生成器给了我们函数中断,协程[生成器send]给了我们重新唤起生成器函数的能力
function printNumWithGen($max)
{
    for ($i=0; $i<$max; $i++ ) {
        $res = yield $i;
        echo $res;
    }
}

$gen1 = printNumWithGen(3);
$gen2 = printNumWithGen(3);

// 手动执行caller1 再 caller2
$gen1->send("调度者: caller1 打印:" . $gen1->current() . PHP_EOL);
$gen2->send("调度者: caller2 打印:" . $gen2->current() . PHP_EOL);

// 手动执行caller1 再 caller2
$gen1->send("调度者: caller1 打印:" . $gen1->current() . PHP_EOL);
$gen2->send("调度者: caller2 打印:" . $gen2->current() . PHP_EOL);

// 手动执行caller2 再 caller1
$gen2->send("调度者: caller2 打印:" . $gen2->current() . PHP_EOL);
$gen1->send("调度者: caller1 打印:" . $gen1->current() . PHP_EOL);

# output
调度者: caller1 打印:0
调度者: caller2 打印:0
调度者: caller1 打印:1
调度者: caller2 打印:1
调度者: caller2 打印:2
调度者: caller1 打印:2
Copier après la connexion
Résumé

Le cas ci-dessus devrait faire comprendre à tout le monde Après avoir compris la signification de la conception des coroutines et comment utiliser les coroutines

, nous créerons alors automatiquement un planificateur automatique (Co exécuteur automatique) pour nos coroutines, il n'est donc pas nécessaire d'interrompre et de reprendre manuellement

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 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

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

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

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

See all articles