parallel\run
(1.0.0)
parallel\run — 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.