parallel

Introduction

parallel est une extension de concurrence parallĂšle pour PHP ≄ 7.2.0. À partir de parallel 1.2.0, PHP ≄ 8.0.0 est requis.

Une brĂšve description des concepts de base de parallel suit, des informations plus dĂ©taillĂ©es peuvent ĂȘtre trouvĂ©es dans cette section du manuel.

Exécution

Un parallel\Runtime représente un thread d'interpréteur PHP. Un parallel\Runtime est configuré avec un fichier d'amorçage optionnel passé à parallel\Runtime::__construct(), il s'agit généralement d'un chargeur automatique, ou d'une autre routine de préchargement: le fichier d'amorçage sera inclus avant l'exécution de toute tùche.

AprĂšs la construction, le parallel\Runtime reste disponible jusqu'Ă  ce qu'il soit fermĂ©, tuĂ©, ou dĂ©truit par les rĂšgles de portĂ©e normales des objets PHP. parallel\Runtime::run() permet au dĂ©veloppeur de planifier des tĂąches pour une exĂ©cution parallĂšle. Un parallel\Runtime a un ordre de planification FIFO, les tĂąches seront exĂ©cutĂ©es dans l'ordre oĂč elles sont planifiĂ©es.

API Fonctionnelle

Parallel implémente une API fonctionnelle, de haut niveau sur parallel\Runtime qui fournit un seul point d'entrée pour exécuter du code parallÚle avec une planification automatique: parallel\run().

TĂąches

Une tùche (Task) est simplement une Closure destinée à une exécution parallÚle. La Closure peut contenir presque n'importe quelle instruction, y compris des fermetures imbriquées. Cependant, certaines instructions sont interdites dans les tùches:

  • yield
  • use by-reference
  • declare class
  • declare named function

Note: Les fermetures imbriquées peuvent utiliser yield ou use by-reference, mais ne doivent pas contenir de déclarations de classe ou de fonctions nommées.

Note: Aucune instruction n'est interdite dans les fichiers que la tĂąche peut inclure.

Future

Le parallel\Future est utilisé pour accéder à la valeur de retour de la tùche, et expose une API pour l'annulation de la tùche.

Canaux

Une tĂąche peut ĂȘtre planifiĂ©e avec des arguments, utiliser des variables de portĂ©e lexicale (par valeur), et retourner une valeur (via un parallel\Future), mais celles-ci ne permettent que la communication unidirectionnelle: Elles permettent au dĂ©veloppeur d'envoyer des donnĂ©es dans une tĂąche et de rĂ©cupĂ©rer des donnĂ©es Ă  partir d'une tĂąche, mais ne permettent pas la communication bidirectionnelle entre les tĂąches. L'API parallel\Channel permet la communication bidirectionnelle entre les tĂąches, un parallel\Channel est un lien de type socket entre les tĂąches que le dĂ©veloppeur peut utiliser pour envoyer et recevoir des donnĂ©es.

ÉvĂ©nements

L'API parallel\Events implémente une boucle d'événements (Traversable) native, et la méthode parallel\Events::poll(). Cela permet au développeur de travailler avec des ensembles de canaux et/ou de futurs. Le développeur ajoute simplement des canaux et des futurs à la boucle d'événements, en définissant éventuellement l'entrée pour les écritures avec parallel\Events::setInput(), et entre dans une boucle foreach: parallel lira et écrira dans les objets au fur et à mesure qu'ils deviennent disponibles, renvoyant des objets parallel\Events\Event décrivant les opérations qui se sont produites.

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.