Maison cadre php Swoole Comment implémenter la coroutine Swoole

Comment implémenter la coroutine Swoole

Dec 10, 2019 pm 04:20 PM
swoole 协程 实现

Comment implémenter la coroutine Swoole

Swoole4 fournit un puissant modèle de programmation de coroutine CSP pour le langage PHP. Les utilisateurs peuvent créer une coroutine via la fonction go pour obtenir l'effet d'exécution simultanée, comme indiqué dans le code suivant :

<?php
//Co::sleep()是Swoole提供的API,并不会阻塞当前进程,只会阻塞协程触发协程切换。
go(function (){
    Co::sleep(1);
    echo "a";
});
go(function (){
    Co::sleep(2);
    echo "b";
});
echo "c";
//输出结果:cab
//程序总执行时间2秒
Copier après la connexion

En fait, le modèle de programmation multi-coroutine a été implémenté avant Swoole4. Lorsque la coroutine est créée, commutée et terminée, la pile php peut être utilisée en conséquence (créer, changer et recycler la pile php).

L'implémentation de la coroutine à l'heure actuelle ne peut pas parfaitement prendre en charge la syntaxe PHP. La raison fondamentale est que les informations de la pile C ne sont pas enregistrées. (Les API fournies dans la machine virtuelle ou par certaines extensions sont implémentées via des fonctions c. Si un changement de coroutine se produit lors de l'appel de ces fonctions, comment la pile c doit-elle être gérée ?)

Swoole4 a ajouté une nouvelle pile c Gestion, lorsque la coroutine est créée, commutée et terminée, elle s'accompagnera de la création, de la commutation et du recyclage de la pile c.

Le plan de mise en œuvre de la coroutine Swoole4 est présenté dans la figure ci-dessous :

Comment implémenter la coroutine Swoole

Parmi eux :

·La couche API fournit des fonctions liées à la coroutine pour les utilisateurs. Par exemple, la fonction go() est utilisée pour créer des coroutines Co::yield() oblige la coroutine actuelle à abandonner le CPU ; ; Co::resume () peut reprendre l'exécution d'une coroutine

·La coroutine Swoole4 doit gérer la pile c et la pile php en même temps. Coroutine est utilisé pour gérer la pile c, et PHPCoroutine est utilisé. Il est utilisé pour gérer la pile php parmi eux, Coroutine(), rendement() et reprendre() implémentent la création, l'échange et l'échange du fichier ; c stack; create_func(), on_yield(), on_resume() réalisent la création et l'échange de la pile php Out

·Swoole4 utilise le bibliothèque boost.context lors de la gestion de la pile c. Les fonctions make_fcontext() et jump_fcontext() sont toutes deux écrites en langage assembleur et implémentées. La création et le changement de contexte de la pile c; 🎜>

Swoole4 encapsule simplement boost.context, à savoir la couche de contexte, Context(), SwapIn() et SwapOut()

correspond à la création et à l'échange dans et hors de la pile c. Le site Web PHP chinois propose un grand nombre de tutoriels d'introduction à Swoole

gratuits, tout le monde est invité à apprendre !

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

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

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)

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Mar 24, 2024 am 11:27 AM

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ?

Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Mar 24, 2024 pm 06:03 PM

Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei

La relation parent-enfant entre les fonctions golang et goroutine La relation parent-enfant entre les fonctions golang et goroutine Apr 25, 2024 pm 12:57 PM

La relation parent-enfant entre les fonctions golang et goroutine

Lequel est le meilleur, Swoole ou Workerman ? Lequel est le meilleur, Swoole ou Workerman ? Apr 09, 2024 pm 07:00 PM

Lequel est le meilleur, Swoole ou Workerman ?

Comment utiliser la coroutine Swoole dans Laravel Comment utiliser la coroutine Swoole dans Laravel Apr 09, 2024 pm 06:48 PM

Comment utiliser la coroutine Swoole dans Laravel

Application de la concurrence et des coroutines dans la conception de l'API Golang Application de la concurrence et des coroutines dans la conception de l'API Golang May 07, 2024 pm 06:51 PM

Application de la concurrence et des coroutines dans la conception de l'API Golang

Lequel a les meilleures performances, swoole ou java ? Lequel a les meilleures performances, swoole ou java ? Apr 09, 2024 pm 07:03 PM

Lequel a les meilleures performances, swoole ou java ?

Comment swoole_process permet-il aux utilisateurs de changer ? Comment swoole_process permet-il aux utilisateurs de changer ? Apr 09, 2024 pm 06:21 PM

Comment swoole_process permet-il aux utilisateurs de changer ?

See all articles