Выполнение

# parallel\Runtime::run

(0.8.0)

parallel\Runtime::run — Выполнение

### Описание

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

Планирует параллельное выполнение `task`.

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

Планирует параллельное выполнение `task`, передавая `argv` во время выполнения.

### Список параметров

`task`
  Замыкание (Closure) со специфическими характеристиками.
`argv`
  Массив (array) аргументов с конкретными характеристиками, которые будут переданы `task` во время выполнения.

### Характеристики задачи

Замыкания, запланированные для параллельного выполнения, не должны:

- принимать или возвращать значения по ссылке
- принимать или возвращать внутренние объекты (смотрите примечания)
- выполнять ограниченный набор инструкций

В замыканиях, предназначенных для параллельного выполнения, запрещены следующие инструкции:

- yield
- use by-reference
- declare class
- declare named function

> Замечание: Вложенные замыкания могут использовать yield или передачу значения по ссылке, но не должны содержать объявления классов или именованных функций.

> Замечание: Никакие инструкции не запрещены в файлах, которые может включать задача.

### Аргументы характеристик

Аргументы не должны:

- содержать ссылки
- содержать ресурсы
- содержать внутренние объекты (смотрите примечания)

> Замечание: В случае ресурсов файлового потока ресурс будет преобразован в файловый дескриптор и передан как целое число (int), где это возможно, не поддерживается в Windows.

### Примечания к внутренним объектам

Внутренние объекты обычно используют настраиваемую структуру, которую нельзя безопасно скопировать по значению, в PHP в настоящее время отсутствует механизм для этого (без сериализации), и поэтому могут использоваться только объекты, которые не используют настраиваемую структуру.

Некоторые внутренние объекты не используют настраиваемую структуру, например, parallel\Events\Event и поэтому могут использоваться совместно.

Замыкания - это особый вид внутреннего объекта, который поддерживает копирование по значению, поэтому может использоваться совместно.

Каналы играют ключевую роль в написании параллельного кода и при необходимости поддерживают одновременный доступ и выполнение, поэтому могут использоваться совместно.

Внимание

Пользовательский класс, расширяющий внутренний класс, может использовать настраиваемую структуру, определённую внутренним классом, и в этом случае они не могут быть безопасно скопированы по значению и поэтому не могут использоваться совместно.

### Возвращаемые значения

Внимание

Нельзя игнорировать возвращаемый parallel\Future, если задача содержит оператор return или throw.

### Исключения

Внимание

Выбрасывает parallel\Runtime\Error\Closed, если parallel\Runtime был закрыт.

Внимание

Выбрасывает parallel\Runtime\Error\IllegalFunction, если `task` является замыканием, созданным из внутренней функции.

Внимание

Выбрасывает parallel\Runtime\Error\IllegalInstruction, если `task` содержит недопустимые инструкции.

Внимание

Выбрасывает parallel\Runtime\Error\IllegalParameter, если `task` принимает или `argv` содержит недопустимые переменные.

Внимание

Выбрасывает parallel\Runtime\Error\IllegalReturn, если `task` возвращается некорректно.

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