# parallel\Runtime::run

(0.8.0)

parallel\Runtime::run — Exécution

### Description

public parallel\Runtime::run(Closure `$task`): ?Future

Planifie `task` pour l'exécution en parallèle.

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

Planifie `task` pour l'exécution en parallèle, en passant `argv` au moment de l'exécution.

### 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.