parallel\run

(1.0.0)

parallel\runВыполнение

Описание

parallel\run(Closure $task): ?Future

Планирует task для выполнения в parallel.

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

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

Автоматическое планирование

Если \parallel\Runtime внутренне созданный и кешированный предыдущим вызовом parallel\run() бездействует, он будет использоваться для выполнения задачи. Если ни один \parallel\Runtime не бездействует, parallel создаст и сохранит в кеш \parallel\Runtime.

Замечание:

Объекты \parallel\Runtime, созданные программистом, не используются для автоматического планирования.

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

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 возвращается некорректно.

Смотрите также