Maison  >  Article  >  cadre php  >  Comment implémenter la coroutine Swoole

Comment implémenter la coroutine Swoole

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-12-10 16:20:022750parcourir

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秒

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:
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 précédent:Swoole est-il écrit en c ?Article suivant:Swoole est-il écrit en c ?