Вступ

parallel – це модуль паралельного виконання для PHP ≥ 7.2.0. З parallel 1.2.0 потрібно PHP ≥ 8.0.0.

Короткий опис основних понять паралельних процесів описано нижче, докладнішу інформацію можна знайти в цьому розділі посібника.

Runtime

parallel\Runtimeпредставляет поток интерпретатора PHPparallel\Runtime налаштований з додатковим файлом початкового завантаження, переданим у parallel\Runtime::__construct()зазвичай це автозавантажувач або будь-яка інша процедура попереднього завантаження: файл початкового завантаження буде підключатися перед виконанням будь-якого завдання.

После созданияparallel\Runtime залишається доступним доти, доки він не буде закритий, знищений або знищений звичайними правилами області видимості об'єктів PHP . parallel\Runtime::run() дозволяє програмісту планувати завдання для паралельного виконання. У parallel\Runtime розклад FIFO, завдання виконуватимуться у порядку, у якому вони заплановані.

Функціональний API

parallel реалізує функціональний API вищого рівня поверх parallel\Runtime, що забезпечує єдину точку входу функції для виконання паралельного коду з автоматичним плануванням: parallel\run()

Завдання

Завдання - це просто замикання (Closure), призначене для паралельного виконання . Closure може містити практично будь-яку інструкцію, включаючи вкладені замикання. Однак є деякі інструкції, які заборонені у завданнях:

  • yield

  • use by-reference

  • declare class

  • declare named function

Зауваження :

Вкладені замикання можуть містити "yield" або "use by-reference", але не повинні містити оголошення класів або іменованих функцій.

Зауваження :

Жодні інструкції не заборонені у файлах, які можуть включати завдання.

Ф'ючерс

parallel\Future використовується для доступу до значення, що повертається із завдання і надає API для скасування завдання.

Канал

Завдання можна запланувати з аргументами, використовувати змінні лексичної області видимості (за значенням) та повернути значення (за допомогою parallel\Future), але це дозволяє лише односпрямований зв'язок: Це дозволяє програмісту відправляти дані та витягувати дані із завдання, але не допускають двонаправлений зв'язок між завданнями. API parallel\Channel забезпечує двоспрямований зв'язок між завданнями, parallel\Channel - це з'єднання типу сокету між завданнями, яке програміст може використовувати для надсилання та отримання даних.

Події

APIparallel\Events реалізує власний цикл подій (Traversable) та метод parallel\Events::poll(). Це дозволяє програмісту працювати з наборами каналів та/або ф'ючерсами. Програміст просто додає канали та ф'ючерси до циклу подій, необов'язково встановлюючи вхід для запису за допомогою parallel\Events::setInput(), і входить у foreach: parallel буде читати і записувати об'єкти в міру їх перетворення. Доступно з отриманням об'єктів parallel\Events\Event, що описують операції, що відбулися.

Дивіться також