Вступ
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, що описують операції, що відбулися.