parallel\run

(1.0.0)

parallel\runExécution

Description

parallel\run(Closure $task): ?Future

Planifie task pour exécution en parallèle.

parallel\run(Closure $task, array $argv): ?Future

Planifie task pour exécution en parallèle, passant argv à l'exécution.

Planification automatique

Si un \parallel\Runtime créé et mis en cache par un appel précédent à parallel\run() est inactif, il sera utilisé pour exécuter la tâche. Si aucun \parallel\Runtime n'est inactif, parallel créera et mettra en cache un \parallel\Runtime.

Note:

Les objets \parallel\Runtime créés par le développeur ne sont pas utilisés pour la planification automatique.

Liste de paramètres

task

Une Closure avec des caractéristiques spécifiques.

argv

Un array d'arguments avec des caractéristiques spécifiques à passer à task au moment de l'exécution.

Task Characteristics

Les fermetures planifiées pour l'exécution en parallèle ne doivent pas :

  • accepter ou retourner par référence
  • accepter ou retourner des objets internes (voir notes)
  • exécuter un ensemble limité d'instructions

Les instructions interdites dans les fermetures destinées à l'exécution en parallèle sont :

  • yield
  • utiliser by-reference
  • déclarer des classes
  • déclarer des fonctions nommées

Note:

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

Note:

Aucune instruction n'est interdite dans les fichiers que la tâche peut inclure.

Caractéristiques des arguments

Les arguments ne doivent pas:

  • contenir des références
  • contenir des ressources
  • contenir des objets internes (voir notes)

Note:

Dans le cas des ressources de flux de fichiers, la ressource sera convertie en descripteur de fichier et passée en int si possible, ceci n'est pas supporté sur Windows.

Notes sur les objets internes

Les objets internes utilisent généralement une structure personnalisée qui ne peut pas être copiée en toute sécurité par valeur, PHP manque actuellement des mécanismes pour le faire (sans sérialisation) et donc seuls les objets qui n'utilisent pas une structure personnalisée peuvent être partagés.

Certains objets internes n'utilisent pas de structure personnalisée, par exemple parallel\Events\Event et peuvent donc être partagés.

Les fermetures sont un type spécial d'objet interne et supportent d'être copiées par valeur, et peuvent donc être partagées.

Les canaux sont centraux pour l'écriture de code parallèle et supportent l'accès et l'exécution concurrents par nécessité, et peuvent donc être partagés.

Avertissement

Une classe utilisateur qui étend une classe interne peut utiliser une structure personnalisée telle que définie par la classe interne, auquel cas elle ne peut pas être copiée en toute sécurité par valeur, et ne peut donc pas être partagée.

Valeurs de retour

Avertissement

La Future retournée ne doit pas être ignorée lorsque la tâche contient une déclaration de retour ou de lancer.

Exceptions

Avertissement

Lance une parallel\Runtime\Error\Closed si parallel\Runtime était fermé.

Avertissement

Lance une parallel\Runtime\Error\IllegalFunction si task est une fermeture créée à partir d'une fonction interne.

Avertissement

Lance une parallel\Runtime\Error\IllegalInstruction si task contient des instructions illégales.

Avertissement

Lance une parallel\Runtime\Error\IllegalParameter si task accepte ou argv contient des variables illégales.

Avertissement

Lance une parallel\Runtime\Error\IllegalReturn si task retourne illégalement.