1
0
mirror of https://github.com/php/doc-uk.git synced 2026-03-24 07:02:12 +01:00
Files

163 lines
7.9 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: mproshchuk Status: ready -->
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="book.parallel">
<?phpdoc extension-membership="pecl" ?>
<title>parallel</title>
<titleabbrev>parallel</titleabbrev>
<preface xml:id="intro.parallel">
&reftitle.intro;
<simpara>
Розширення parallel дозволяє виконувати PHP-код в паралельних потоках.
Воно доступне в PHP ≥ 7.2.0. Для parallel ≥ 1.2.0 потрібна версія PHP ≥ 8.0.0.
</simpara>
<simpara>
Це стислий опис загального алгоритму parallel. Більше інформації є в
наступних частинах розділу.
</simpara>
<simplesect>
<title>Клас Runtime</title>
<simpara>
Клас <classname>parallel\Runtime</classname> представляє потік
інтерпретатора PHP. Клас <classname>parallel\Runtime</classname>
можна налаштувати за допомогою необов'язкового файлу ініціалізації, який
потрібно передати в метод
<methodname>parallel\Runtime::__construct</methodname>. Зазвичай цей файл є
автозавантажувачем чи чимсь на кшталт процедури попереднього завантаження:
він буде підключатися перед виконанням кожного завдання.
</simpara>
<simpara>
Після створення, примірник <classname>parallel\Runtime</classname>
залишається доступним, допоки його не закриють чи знищать відповідно до
правил визначення області видимості об'єктів PHP. Метод
<methodname>parallel\Runtime::run</methodname> дозволяє програмісту
планувати запуски паралельних завдань. Клас
<classname>parallel\Runtime</classname> послуговується принципом FIFO
(перший прийшов — перший вийшов), тобто завдання виконуються в тій
послідовності, у якій вони були заплановані.
</simpara>
</simplesect>
<simplesect>
<title>Функціональний API</title>
<simpara>
parallel реалізує функціональний API вищого рівня поверх
<classname>parallel\Runtime</classname>, надаючи єдину функціональну точку
входу для паралельного виконання коду з автоматичним плануванням — функцію
<function>parallel\run</function>.
</simpara>
</simplesect>
<simplesect>
<title>Завдання</title>
<para>
Завдання — це просте замикання (<classname>Closure</classname>), яке
потрібно буде виконати паралельно. Замикання
(<classname>Closure</classname>) може містити більшість інструкцій, навіть
вкладені замикання. Проте є інструкції, заборонені в завданнях:
<itemizedlist>
<listitem>
<simpara>yield</simpara>
</listitem>
<listitem>
<simpara>посилання</simpara>
</listitem>
<listitem>
<simpara>оголошення класу</simpara>
</listitem>
<listitem>
<simpara>оголошення функції з назвою</simpara>
</listitem>
</itemizedlist>
</para>
<note>
<simpara>
Вкладеним замиканням дозволяється містити інструкції yield або посилання,
але не оголошення класів чи функцій з назвами.
</simpara>
</note>
<note>
<simpara>
Скрипти, що підключені в завданнях, жодних обмежень не мають.
</simpara>
</note>
</simplesect>
<simplesect>
<title>Ф'ючерс</title>
<simpara>
Клас <classname>parallel\Future</classname> використовується для доступу до
значень, що повертає завдання, і надає API для скасування завдання.
</simpara>
</simplesect>
<simplesect>
<title>Канал</title>
<simpara>
Завдання можна можна додати в чергу, вказати йому параметри, використовувати
змінні лексичної області (тобто за значенням), та отримати результат
виконання (через клас <classname>parallel\Future</classname>), таким чином
встановивши однонаправлений зв'язок, дозволяючи програмісту передати дані
в завдання, а потім отримати від нього відповідь. Для двонаправленого
зв'язку між завданнями використовується API
<classname>parallel\Channel</classname>, який утворює сокет-подібний зв'язок
між завданнями, який програміст може використовувати для надсилання та
отримання даних.
</simpara>
</simplesect>
<simplesect>
<title>Події</title>
<simpara>
API <classname>parallel\Events</classname> реалізує власний цикл подій
(<classname>Traversable</classname>) та метод
<methodname>parallel\Events::poll</methodname>. Це дозволяє програмісту
працювати з набором каналів та/або ф'ючерсів. Програміст може просто додати
канали та ф'ючерси в цикл подій, за бажанням встановивши вхідні дані для
запису за допомогою методу
<methodname>parallel\Events::setInput</methodname>, та пройтися по подіях
в циклі foreach: розширення parallel передаватиме дані від об'єктів та в
об'єкти, коли вони стануть доступні, створюючи примірники
<classname>parallel\Events\Event</classname>, що описують операції, які
відбулися.
</simpara>
</simplesect>
<simplesect role="seealso">
&reftitle.seealso;
<simplelist>
<member><xref linkend="philosophy.parallel"/></member>
</simplelist>
</simplesect>
</preface>
&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;
<!--&reference.parallel.examples;-->
</book>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->