parallel\run
(1.0.0)
parallel\run â ExĂ©cution
Description
function parallel\run(
Closure $task):
?Future
Planifie task pour exécution en parallÚle.
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.
Caractéristiques de la tùche
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 peuvent ĂȘ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.