


Explication détaillée de la coroutine php (avec exemples)
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
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
# 本代码手动调整了进程执行代码的顺序,当然本代码实现不用协程也可以,只是利用本流程说明协程作用 # 生成器给了我们函数中断,协程[生成器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
, 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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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

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

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.

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

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

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

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.
