Ejecución

# parallel\Runtime::run

(0.8.0)

parallel\Runtime::run — Ejecución

### Descripción

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

Planifica `task` para la ejecución en paralelo.

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

Planifica `task` para la ejecución en paralelo, pasando `argv` en el momento de la ejecución.

### Parámetros

`task`
  Una Closure con características específicas.
`argv`
  Un array de argumentos con características específicas para pasar a `task` en el momento de la ejecución.

### Características de la tarea

Las cierres planificadas para la ejecución en paralelo no deben:

- aceptar o devolver por referencia
- aceptar o devolver objetos internos (ver notas)
- ejecutar un conjunto limitado de instrucciones

Las instrucciones prohibidas en los cierres destinados a la ejecución en paralelo son:

- yield
- usar by-reference
- declarar clases
- declarar funciones nombradas

> Nota: Los cierres anidados pueden usar yield o by-reference, pero no deben contener declaraciones de clases o funciones nombradas.

> Nota: Ninguna instrucción está prohibida en los ficheros que la tarea puede incluir.

### Características de los argumentos

Los argumentos no deben:

- contener referencias
- contener recursos
- contener objetos internos (ver notas)

> Nota: En el caso de los recursos de flujo de ficheros, el recurso será convertido en descriptor de fichero y pasado en int si es posible, esto no está soportado en Windows.

### Notas sobre los objetos internos

Los objetos internos utilizan generalmente una estructura personalizada que no puede ser copiada de manera segura por valor, PHP carece actualmente de mecanismos para hacerlo (sin serialización) y por lo tanto solo los objetos que no utilizan una estructura personalizada pueden ser compartidos.

Algunos objetos internos no utilizan una estructura personalizada, por ejemplo parallel\Events\Event y por lo tanto pueden ser compartidos.

Los cierres son un tipo especial de objeto interno y soportan ser copiados por valor, y por lo tanto pueden ser compartidos.

Los canales son centrales para la escritura de código paralelo y soportan el acceso y la ejecución concurrentes por necesidad, y por lo tanto pueden ser compartidos.

Advertencia

Una clase de usuario que extiende una clase interna puede usar una estructura personalizada tal como está definida por la clase interna, en cuyo caso no puede ser copiada de manera segura por valor, y por lo tanto no puede ser compartida.

### Valores devueltos

Advertencia

El Future devuelto no debe ser ignorado cuando la tarea contiene una declaración de retorno o de lanzamiento.

### Excepciones

Advertencia

Lanza una parallel\Runtime\Error\Closed si parallel\Runtime estaba cerrado.

Advertencia

Lanza una parallel\Runtime\Error\IllegalFunction si `task` es un cierre creado a partir de una función interna.

Advertencia

Lanza una parallel\Runtime\Error\IllegalInstruction si `task` contiene instrucciones ilegales.

Advertencia

Lanza una parallel\Runtime\Error\IllegalParameter si `task` acepta o `argv` contiene variables ilegales.

Advertencia

Lanza una parallel\Runtime\Error\IllegalReturn si `task` devuelve de manera ilegal.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open