parallel parallel &reftitle.intro; Розширення parallel дозволяє виконувати PHP-код в паралельних потоках. Воно доступне в PHP ≥ 7.2.0. Для parallel ≥ 1.2.0 потрібна версія PHP ≥ 8.0.0. Це стислий опис загального алгоритму parallel. Більше інформації є в наступних частинах розділу. Клас Runtime Клас parallel\Runtime представляє потік інтерпретатора PHP. Клас parallel\Runtime можна налаштувати за допомогою необов'язкового файлу ініціалізації, який потрібно передати в метод parallel\Runtime::__construct. Зазвичай цей файл є автозавантажувачем чи чимсь на кшталт процедури попереднього завантаження: він буде підключатися перед виконанням кожного завдання. Після створення, примірник parallel\Runtime залишається доступним, допоки його не закриють чи знищать відповідно до правил визначення області видимості об'єктів PHP. Метод parallel\Runtime::run дозволяє програмісту планувати запуски паралельних завдань. Клас parallel\Runtime послуговується принципом FIFO (перший прийшов — перший вийшов), тобто завдання виконуються в тій послідовності, у якій вони були заплановані. Функціональний API parallel реалізує функціональний API вищого рівня поверх parallel\Runtime, надаючи єдину функціональну точку входу для паралельного виконання коду з автоматичним плануванням — функцію parallel\run. Завдання Завдання — це просте замикання (Closure), яке потрібно буде виконати паралельно. Замикання (Closure) може містити більшість інструкцій, навіть вкладені замикання. Проте є інструкції, заборонені в завданнях: yield посилання оголошення класу оголошення функції з назвою Вкладеним замиканням дозволяється містити інструкції yield або посилання, але не оголошення класів чи функцій з назвами. Скрипти, що підключені в завданнях, жодних обмежень не мають. Ф'ючерс Клас parallel\Future використовується для доступу до значень, що повертає завдання, і надає API для скасування завдання. Канал Завдання можна можна додати в чергу, вказати йому параметри, використовувати змінні лексичної області (тобто за значенням), та отримати результат виконання (через клас parallel\Future), таким чином встановивши однонаправлений зв'язок, дозволяючи програмісту передати дані в завдання, а потім отримати від нього відповідь. Для двонаправленого зв'язку між завданнями використовується API parallel\Channel, який утворює сокет-подібний зв'язок між завданнями, який програміст може використовувати для надсилання та отримання даних. Події API parallel\Events реалізує власний цикл подій (Traversable) та метод parallel\Events::poll. Це дозволяє програмісту працювати з набором каналів та/або ф'ючерсів. Програміст може просто додати канали та ф'ючерси в цикл подій, за бажанням встановивши вхідні дані для запису за допомогою методу parallel\Events::setInput, та пройтися по подіях в циклі foreach: розширення parallel передаватиме дані від об'єктів та в об'єкти, коли вони стануть доступні, створюючи примірники parallel\Events\Event, що описують операції, які відбулися. &reftitle.seealso; &reference.parallel.setup; &reference.parallel.philosophy; &reference.parallel.functional; &reference.parallel.parallel.runtime; &reference.parallel.parallel.future; &reference.parallel.parallel.channel; &reference.parallel.parallel.events; &reference.parallel.parallel.events.input; &reference.parallel.parallel.events.event; &reference.parallel.parallel.events.event.type; &reference.parallel.parallel.sync;