1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00

parallel : fix XML by converting para to simpara tags via script

This commit is contained in:
Gina Peter Banyard
2026-01-19 03:29:20 +00:00
parent bf4c8dc86c
commit 3820077d27
44 changed files with 441 additions and 473 deletions

View File

@@ -1,38 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: bbfa9738785f054752e6cb565cd0a58e71015bc6 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<book xml:id="book.parallel" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<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;
<para>
<simpara>
parallel - это модуль параллельного выполнения для PHP ≥ 7.2.0.
Начиная с parallel 1.2.0, требуется PHP ≥ 8.0.0.
</para>
<para>
</simpara>
<simpara>
Краткое описание основных понятий параллельных процессов описано ниже, более подробную информацию можно найти в этом разделе руководства.
</para>
</simpara>
<simplesect>
<title>Runtime</title>
<para>
<simpara>
<classname>parallel\Runtime</classname> представляет поток интерпретатора PHP. <classname>parallel\Runtime</classname> настроен с дополнительным файлом начальной загрузки, переданным в <methodname>parallel\Runtime::__construct</methodname>, обычно это автозагрузчик
или какая-либо другая процедура предварительной загрузки: файл начальной загрузки будет подключаться перед выполнением любой задачи.
</para>
<para>
</simpara>
<simpara>
После создания <classname>parallel\Runtime</classname> остаётся доступным до тех пор, пока он не будет закрыт, уничтожен или уничтожен обычными правилами области видимости объектов PHP.
<methodname>parallel\Runtime::run</methodname> позволяет программисту планировать задачи для параллельного выполнения.
У <classname>parallel\Runtime</classname> расписание FIFO, задачи будут выполняться в том порядке, в котором они запланированы.
</para>
</simpara>
</simplesect>
<simplesect>
<title>Функциональный API</title>
<para>
<simpara>
parallel реализует функциональный API более высокого уровня поверх <classname>parallel\Runtime</classname>, который обеспечивает единую точку входа функции для выполнения параллельного кода
с автоматическим планированием: <function>parallel\run</function>.
</para>
</simpara>
</simplesect>
<simplesect>
<title>Задача</title>
@@ -41,58 +41,58 @@
Однако есть некоторые инструкции, которые запрещены в задачах:
<itemizedlist>
<listitem>
<para>yield</para>
<simpara>yield</simpara>
</listitem>
<listitem>
<para>use by-reference</para>
<simpara>use by-reference</simpara>
</listitem>
<listitem>
<para>declare class</para>
<simpara>declare class</simpara>
</listitem>
<listitem>
<para>declare named function</para>
<simpara>declare named function</simpara>
</listitem>
</itemizedlist>
</para>
<note>
<para>
<simpara>
Вложенные замыкания могут содержать "yield" или "use by-reference", но не должны содержать объявления классов или именованных функций.
</para>
</simpara>
</note>
<note>
<para>
<simpara>
Никакие инструкции не запрещены в файлах, которые может включать задача.
</para>
</simpara>
</note>
</simplesect>
<simplesect>
<title>Фьючерс</title>
<para>
<simpara>
<classname>parallel\Future</classname> используется для доступа к возвращаемому значению из задачи и предоставляет API для отмены задачи.
</para>
</simpara>
</simplesect>
<simplesect>
<title>Канал</title>
<para>
<simpara>
Задачу можно запланировать с аргументами, использовать переменные лексической области видимости (по значению) и вернуть значение (с помощью <classname>parallel\Future</classname>), но это разрешает только однонаправленную связь:
Это позволяет программисту отправлять данные и извлекать данные из задачи, но не допускают двунаправленную связь между задачами.
API <classname>parallel\Channel</classname> обеспечивает двунаправленную связь между задачами, <classname>parallel\Channel</classname> - это соединение типа сокета между задачами, которое программист может использовать для отправки и получения данных.
</para>
</simpara>
</simplesect>
<simplesect>
<title>События</title>
<para>
<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>,
описывающих произошедшие операции.
</para>
</simpara>
</simplesect>
<simplesect role="seealso">
&reftitle.seealso;
<simplelist>
<member><xref linkend="philosophy.parallel" /></member>
<member><xref linkend="philosophy.parallel"/></member>
</simplelist>
</simplesect>
</preface>

View File

@@ -1,19 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 3985f162bcb7f71764c8ea1c637d70303c01847c Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<section xml:id="parallel.installation" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel.installation">
&reftitle.install;
<para>
<simpara>
Используйте <option role="configure">--with-parallel[=DIR]</option> при компиляции PHP.
</para>
</simpara>
<para>
<simpara>
Пользователям Windows необходимо добавить <filename>php_parallel.dll</filename> в &php.ini;
</para>
</simpara>
</section>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml

View File

@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="functional.parallel" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="functional.parallel">
<title>Функциональный API</title>
<partintro>
<para>
<simpara>
API <classname>parallel\Runtime</classname> обеспечивает высокую степень контроля для опытных программистов PHP и тех, кто хорошо знаком с написанием приложений, использующих параллельные процессы.
</para>
</simpara>
<para>
Функциональный API обеспечивает меньший контроль в обмен на возможность принимать решения для программиста:
<itemizedlist>
<listitem>
<para>все исполняемые среды выполнения загружаются одинаково</para>
<simpara>все исполняемые среды выполнения загружаются одинаково</simpara>
</listitem>
<listitem>
<para>планирование определяется API, а не программистом</para>
<simpara>планирование определяется API, а не программистом</simpara>
</listitem>
</itemizedlist>
<function>parallel\run</function> обеспечивает гарантию того, что задача начнёт выполняться параллельно, как только это разрешено ограничениями оборудования и операционной системы, без

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 1efc90bacb2ebf840f5416bd11c8daf8c9345e33 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="parallel.bootstrap">
<refnamediv>
@@ -13,9 +13,9 @@
<type>void</type><methodname>parallel\bootstrap</methodname>
<methodparam><type>string</type><parameter>file</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Должен использовать предоставленный <parameter>file</parameter> для начальной загрузки всех сред выполнения, созданных для автоматического планирования с помощью <function>parallel\run</function>.
</para>
</simpara>
</refsect1>
<refsect1 role="parameters">
@@ -24,9 +24,9 @@
<varlistentry>
<term><parameter>file</parameter></term>
<listitem>
<para>
<simpara>
Путь к файлу для начальной загрузки всех сред выполнения.
</para>
</simpara>
</listitem>
</varlistentry>
</variablelist>
@@ -34,22 +34,22 @@
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<simpara>
&return.void;
</para>
</simpara>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\Bootstrap</type>, если этот процесс уже был ранее вызван.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\Bootstrap</type>, если вызывается после <function>parallel\run</function>.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 41445b3d771660805270f52adf0e421aa20f12ab Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel.run" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="parallel.run">
<refnamediv>
<refname>parallel\run</refname>
<refpurpose>Выполнение</refpurpose>
@@ -14,43 +13,43 @@
<type class="union"><type>Future</type><type>null</type></type><methodname>parallel\run</methodname>
<methodparam><type>Closure</type><parameter>task</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Планирует <parameter>task</parameter> для выполнения в parallel.
</para>
</simpara>
<methodsynopsis>
<type class="union"><type>Future</type><type>null</type></type><methodname>parallel\run</methodname>
<methodparam><type>Closure</type><parameter>task</parameter></methodparam>
<methodparam><type>array</type><parameter>argv</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Планирует <parameter>task</parameter> для выполнения в parallel, передавая <parameter>argv</parameter> во время выполнения.
</para>
</simpara>
</refsect1>
<refsect1 role="scheduling-characteristics">
<title>Автоматическое планирование</title>
<para>
<simpara>
Если <classname>\parallel\Runtime</classname> внутренне созданный и кешированный предыдущим вызовом <function>parallel\run</function> бездействует,
он будет использоваться для выполнения задачи. Если ни один <classname>\parallel\Runtime</classname> не бездействует, parallel создаст и сохранит в кеш <classname>\parallel\Runtime</classname>.
</para>
</simpara>
<note>
<para>
<simpara>
Объекты <classname>\parallel\Runtime</classname>, созданные программистом, не используются для автоматического планирования.
</para>
</simpara>
</note>
</refsect1>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='parameters'])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='closure-characteristics'])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='argv-characteristics'])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='object-characteristics'])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='returnvalues'])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='exceptions'])" />
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='parameters'])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='closure-characteristics'])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='argv-characteristics'])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='object-characteristics'])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='returnvalues'])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('parallel-runtime.run')/db:refsect1[@role='exceptions'])"/>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><xref linkend="parallel-runtime.run" /></member>
<member><xref linkend="parallel-runtime.run"/></member>
</simplelist>
</refsect1>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-channel" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-channel" role="class">
<title>Класс parallel\Channel</title>
<titleabbrev>parallel\Channel</titleabbrev>
@@ -9,44 +9,44 @@
<partintro>
<section>
<title>Небуферизованные каналы</title>
<para>
<simpara>
Небуферизованный канал будет блокироваться при вызовах <methodname>parallel\Channel::send</methodname> до тех пор, пока не появится получатель, и блокироваться при вызовах
<methodname>parallel\Channel::recv</methodname> до тех пор, пока не появится отправитель. Это означает, что небуферизованный канал - это не только способ обмена данными между задачами,
но и простой метод синхронизации.
</para>
<para>
</simpara>
<simpara>
Небуферизованный канал - это самый быстрый способ обмена данными между задачами, требующий наименьшего количества копирования.
</para>
</simpara>
</section>
<section>
<title>Буферизованные каналы</title>
<para>
<simpara>
Буферизованный канал не будет блокироваться при вызовах <methodname>parallel\Channel::send</methodname> до заполнения буфера, а вызовы
<methodname>parallel\Channel::recv</methodname> будут блокироваться до тех пор, пока в буфере есть данные.
</para>
</simpara>
</section>
<section>
<title>Замыкания поверх каналов</title>
<para>
<simpara>
Мощная особенность параллельных каналов состоит в том, что они позволяют обмениваться замыканиями между задачами (и средами выполнения).
</para>
<para>
</simpara>
<simpara>
Когда замыкание отправляется по каналу, оно буферизуется, не меняет буферизацию канала, передающего замыкание,
но оно влияет на статическую область видимости внутри замыкания: одно и то же замыкание, отправленное в разные среды выполнения или в одну и ту же среду выполнения,
не будет делиться своей статической областью.
</para>
<para>
</simpara>
<simpara>
Это означает, что всякий раз, когда выполняется замыкание, которое было передано каналом, статическое состояние будет таким, каким оно было при буферизации замыкания.
</para>
</simpara>
</section>
<section>
<title>Анонимные каналы</title>
<para>
<simpara>
Конструктор анонимного канала позволяет программисту избегать присвоения имён каждому каналу: parallel генерирует уникальное имя для анонимных каналов.
</para>
</simpara>
</section>
<section xml:id="parallel-channel.synopsis">
@@ -67,22 +67,22 @@
<classsynopsisinfo role="comment">Анонимный конструктор</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-channel')/db:refentry/db:refsect1[@audience='anonymous']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Доступ</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-channel')/db:refentry/db:refsect1[@audience='access']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Совместное использование</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-channel')/db:refentry/db:refsect1[@audience='sharing']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Закрытие</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-channel')/db:refentry/db:refsect1[@audience='close']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Константа для бесконечной буферизации</classsynopsisinfo>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-events-event" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-events-event" role="class">
<title>Класс parallel\Events\Event</title>
<titleabbrev>parallel\Events\Event</titleabbrev>
@@ -10,11 +10,11 @@
<section>
<title>Объекты событий</title>
<para>
<simpara>
Когда возвращается объект Event, <varname>Event::$object</varname> должен быть удалён из цикла,
который его вернул, если событие является событием записи, класс <classname>Input</classname>
экземпляра <varname>Event::$source</varname> также следует удалить.
</para>
</simpara>
</section>
<section xml:id="parallel-events-event.synopsis">
&reftitle.classsynopsis;

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-events-input" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-events-input" role="class">
<title>Класс parallel\Events\Input</title>
<titleabbrev>parallel\Events\Input</titleabbrev>
@@ -10,17 +10,17 @@
<section>
<title>Входные данные событий</title>
<para>
<simpara>
Объект Input - это контейнер для данных, которые объект <classname>parallel\Events</classname> запишет
в объекты <classname>parallel\Channel</classname> по мере их доступности.
Несколько циклов событий могут совместно использовать контейнер ввода - parallel не проверяет содержимое контейнера,
если он установлен как входные данные для объекта <classname>parallel\Events</classname>.
</para>
</simpara>
<note>
<para>
<simpara>
Когда объект <classname>parallel\Events</classname> выполняет запись, цель удаляется из объекта входных данных,
как если бы был вызван метод <methodname>parallel\Events\Input::remove</methodname>.
</para>
</simpara>
</note>
</section>
@@ -41,13 +41,13 @@
<!-- }}} -->
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events-input')/db:refentry/db:refsect1[@audience='adding']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events-input')/db:refentry/db:refsect1[@audience='removing']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events-input')/db:refentry/db:refsect1[@audience='clearing']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
</classsynopsis>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-events" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-events" role="class">
<title>Класс parallel\Events</title>
<titleabbrev>parallel\Events</titleabbrev>
@@ -9,12 +9,12 @@
<partintro>
<section>
<title>Цикл событий</title>
<para>
<simpara>
Цикл событий отслеживает состояние наборов объектов Future и/или Channel (целей) для выполнения операций чтения
(<methodname>parallel\Future::value</methodname>, <methodname>parallel\Channel::recv</methodname>)
и записи (<methodname>parallel\Channel::send</methodname>) по мере того,
как цели становятся доступными и операции могут выполняться без блокировки цикла событий.
</para>
</simpara>
</section>
<section xml:id="parallel-events.synopsis">
&reftitle.classsynopsis;
@@ -40,22 +40,22 @@
<classsynopsisinfo role="comment">Входные данные</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events')/db:refentry/db:refsect1[@audience='input']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Цели</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events')/db:refentry/db:refsect1[@audience='targets']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Поведение</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events')/db:refentry/db:refsect1[@audience='behaviour']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Опрос</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-events')/db:refentry/db:refsect1[@audience='polling']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
</classsynopsis>
<!-- }}} -->

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: a31156c3d8e98d9d8d0d82cab7e37407a4f75f63 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-future" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-future" role="class">
<title>Класс parallel\Future</title>
<titleabbrev>parallel\Future</titleabbrev>
@@ -10,9 +10,9 @@
<section>
<title>Объекты Future</title>
<para>
<simpara>
Future представляет возвращаемое значение или неперехваченное исключение из задачи и предоставляет API для отмены.
</para>
</simpara>
<example>
<title>Пример, показывающий Future как возвращаемое значение</title>
<programlisting role="php">
@@ -33,10 +33,10 @@ printf("Привет, %s\n", $future->value());
]]>
</screen>
</example>
<para>
<simpara>
Поведение Future также позволяет использовать его в качестве простой точки синхронизации,
даже если задача не возвращает значение явно.
</para>
</simpara>
<example>
<title>Пример, показывающий Future как точку синхронизации</title>
<programlisting role="php">
@@ -86,17 +86,17 @@ echo "\nродительский поток продолжает работат
<classsynopsisinfo role="comment">Разрешение</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-future')/db:refentry/db:refsect1[@audience='resolution']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Состояние</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-future')/db:refentry/db:refsect1[@audience='state']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Отмена</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-future')/db:refentry/db:refsect1[@audience='cancellation']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
</classsynopsis>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d0da6acae85277454b0f27f1fb208040173ec234 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-runtime" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-runtime" role="class">
<title>Класс parallel\Runtime</title>
<titleabbrev>parallel\Runtime</titleabbrev>
@@ -10,33 +10,33 @@
<section>
<title>Объекты во временя выполнения</title>
<para>
<simpara>
Каждая среда выполнения представляет собой один поток PHP, поток создаётся (и загружается) при создании.
Затем поток ожидает, пока задачи будут запланированы: запланированные задачи будут выполняться FIFO,
а затем поток возобновит ожидание, пока не будут запланированы другие задачи или пока он не будет закрыт,
убит или уничтожен в соответствии с обычными правилами области видимости объектов PHP.
</para>
</simpara>
<warning>
<para>
<simpara>
Когда среда выполнения уничтожается обычными правилами области видимости объектов PHP,
она сначала выполняет все запланированные задачи и при этом блокирует добавление новых.
</para>
</simpara>
</warning>
</section>
<section>
<title>Начальная загрузка во время выполнения</title>
<para>
<simpara>
Когда создаётся новая среда выполнения, она не разделяет код с потоком (или процессом), который её создал.
Это означает, что в нём не загружены те же классы и функции, а также не установлен один и тот же автозагрузчик.
В некоторых случаях желательна очень лёгкая среда выполнения, потому что задачи, которые будут запланированы,
не нуждаются в доступе к коду в родительском потоке.
В тех случаях, когда задачам нужен доступ к одному и тому же коду, достаточно установить автозагрузчик в качестве начальной загрузки.
</para>
</simpara>
<note>
<para>
<simpara>
Предварительная загрузка может использоваться вместе с параллельной, в этом случае предварительно загруженный код доступен без начальной загрузки.
</para>
</simpara>
</note>
</section>
@@ -58,17 +58,17 @@
<classsynopsisinfo role="comment">Создание</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-runtime')/db:refentry/db:refsect1[@audience='create']/descendant::db:constructorsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Выполнение</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-runtime')/db:refentry/db:refsect1[@audience='execute']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Присоединение</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-runtime')/db:refentry/db:refsect1[@audience='join']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
</classsynopsis>
<!-- }}} -->

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0997ae3510683f23a1d6dc675ddc0f689e411d90 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.parallel-sync" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<reference xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="class.parallel-sync" role="class">
<title>Класс parallel\Sync</title>
<titleabbrev>parallel\Sync</titleabbrev>
@@ -9,15 +9,15 @@
<partintro>
<section>
<title>Синхронизация низкого уровня</title>
<para>
<simpara>
Класс <classname>parallel\Sync</classname> обеспечивает доступ к низкоуровневым примитивам синхронизации, мьютексам,
условным переменным и позволяет реализовать семафоры.
</para>
</simpara>
<para>
<simpara>
Синхронизация для большинства приложений намного лучше реализуется с использованием каналов,
однако в некоторых случаях авторы низкоуровневого кода могут счесть полезным иметь доступ к этим механизмам более низкого уровня.
</para>
</simpara>
</section>
@@ -39,17 +39,17 @@
<classsynopsisinfo role="comment">Конструктор</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-sync')/db:refentry/db:refsect1[@audience='construction']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Доступ</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-sync')/db:refentry/db:refsect1[@audience='access']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
<classsynopsisinfo role="comment">Синхронизация</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.parallel-sync')/db:refentry/db:refsect1[@audience='synchronization']/descendant::db:methodsynopsis[not(@role='procedural')])">
<xi:fallback />
<xi:fallback/>
</xi:include>
</classsynopsis>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-channel.close" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-channel.close">
<refnamediv>
<refname>parallel\Channel::close</refname>
<refpurpose>Закрытие</refpurpose>
@@ -12,20 +11,20 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>parallel\Channel::close</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Закрывает канал.
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Channel\Error\Closed</type>, если канал уже был закрыт.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-channel.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-channel.construct">
<refnamediv>
<refname>parallel\Channel::__construct</refname>
<refpurpose>Конструктор класса Channel</refpurpose>
@@ -14,16 +13,16 @@
<modifier>public</modifier> <methodname>parallel\Channel::__construct</methodname>
<void/>
</methodsynopsis>
<para>
<simpara>
Создаёт анонимный небуферизованный канал
</para>
</simpara>
<methodsynopsis>
<modifier>public</modifier> <methodname>parallel\Channel::__construct</methodname>
<methodparam><type>int</type><parameter>capacity</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Создаёт анонимный буферизованный канал с заданной ёмкостью.
</para>
</simpara>
</refsect1>
@@ -33,9 +32,9 @@
<varlistentry>
<term><parameter>capacity</parameter></term>
<listitem>
<para>
<simpara>
Может быть <type>Channel::Infinite</type> или положительным целым числом.
</para>
</simpara>
</listitem>
</varlistentry>
</variablelist>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-channel.make" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-channel.make">
<refnamediv>
<refname>parallel\Channel::make</refname>
<refpurpose>Доступ</refpurpose>
@@ -14,17 +13,17 @@
<modifier>public</modifier> <type>Channel</type><methodname>parallel\Channel::make</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Создаёт небуферизованный канал с заданным именем
</para>
</simpara>
<methodsynopsis>
<modifier>public</modifier> <type>Channel</type><methodname>parallel\Channel::make</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
<methodparam><type>int</type><parameter>capacity</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Создаёт буферизованный канал с заданным именем и ёмкостью.
</para>
</simpara>
</refsect1>
@@ -34,17 +33,17 @@
<varlistentry>
<term><parameter>name</parameter></term>
<listitem>
<para>
<simpara>
Имя канала.
</para>
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>capacity</parameter></term>
<listitem>
<para>
<simpara>
Может быть <type>Channel::Infinite</type> или положительным целым числом
</para>
</simpara>
</listitem>
</varlistentry>
</variablelist>
@@ -53,9 +52,9 @@
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Channel\Error\Existence</type>, если канал уже существует.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-channel.open" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-channel.open">
<refnamediv>
<refname>parallel\Channel::open</refname>
<refpurpose>Доступ</refpurpose>
@@ -14,18 +13,18 @@
<modifier>public</modifier> <type>Channel</type><methodname>parallel\Channel::open</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Открывает канал с заданным именем
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Channel\Error\Existence</type>, если канал не существует.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-channel.recv" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-channel.recv">
<refnamediv>
<refname>parallel\Channel::recv</refname>
<refpurpose>Совместное использование</refpurpose>
@@ -12,20 +11,20 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>mixed</type><methodname>parallel\Channel::recv</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Получает значение из этого канала
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Channel\Error\Closed</type>, если канал закрыт.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-channel.send" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-channel.send">
<refnamediv>
<refname>parallel\Channel::send</refname>
<refpurpose>Совместное использование</refpurpose>
@@ -14,23 +13,23 @@
<modifier>public</modifier> <type>void</type><methodname>parallel\Channel::send</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Отправляет заданное значение в канал
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Channel\Error\Closed</type>, если канал закрыт.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Channel\Error\IllegalValue</type>, если значение недопустимо.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.addchannel" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.addchannel">
<refnamediv>
<refname>parallel\Events::addChannel</refname>
<refpurpose>Цели</refpurpose>
@@ -14,17 +13,17 @@
<modifier>public</modifier> <type>void</type><methodname>parallel\Events::addChannel</methodname>
<methodparam><type>parallel\Channel</type><parameter>channel</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Следит за событиями в заданном <parameter>channel</parameter>
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Error\Existence</type>, если канал уже был добавлен.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.addfuture" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.addfuture">
<refnamediv>
<refname>parallel\Events::addFuture</refname>
<refpurpose>Цели</refpurpose>
@@ -15,17 +14,17 @@
<methodparam><type>string</type><parameter>name</parameter></methodparam>
<methodparam><type>parallel\Future</type><parameter>future</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Следит за событиями в заданном <parameter>future</parameter>
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Error\Existence</type>, если цель с данным именем уже была добавлена.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5d927c376e2d53433ff435eea53e546b51d9834b Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.poll" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.poll">
<refnamediv>
<refname>parallel\Events::poll</refname>
<refpurpose>Опрос</refpurpose>
@@ -12,32 +11,32 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type class="union"><type>parallel\Events\Event</type><type>null</type></type><methodname>parallel\Events::poll</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Опрашивает для следующего события
</para>
</simpara>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<simpara>
Если целей не осталось, возвращается &null;.
</para>
<para>
</simpara>
<simpara>
Если это будет неблокирующий цикл и произойдёт блокировка, будет возвращено значение &null;.
</para>
<para>
</simpara>
<simpara>
В противном случае <classname>parallel\Events\Event</classname> возвращает описание события.
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Error\Timeout</type>, если время ожидания использовано и достигнуто.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.remove" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.remove">
<refnamediv>
<refname>parallel\Events::remove</refname>
<refpurpose>Цели</refpurpose>
@@ -14,17 +13,17 @@
<modifier>public</modifier> <type>void</type><methodname>parallel\Events::remove</methodname>
<methodparam><type>string</type><parameter>target</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Удаляет заданный <parameter>target</parameter>
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Error\Existence</type>, если цель с указанным именем не найдена.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5d927c376e2d53433ff435eea53e546b51d9834b Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.setblocking" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.setblocking">
<refnamediv>
<refname>parallel\Events::setBlocking</refname>
<refpurpose>Поведение</refpurpose>
@@ -10,33 +9,33 @@
<refsect1 role="description" audience="behaviour">
&reftitle.description;
<para>
<simpara>
По умолчанию, когда опрашиваются события, блокировка будет происходить (на уровне PHP) до тех пор, пока не будет возвращено первое событие:
установка режима блокировки в &false; приведёт к тому, что опрос вернёт управление, если первая опрошенная цель не готова.
</para>
<para>
</simpara>
<simpara>
Отличается от установки времени ожидания 0 с помощью <methodname>parallel\Events::setTimeout</methodname>, поскольку время ожидания 0,
хотя и разрешено, выбросит исключение, которое может быть чрезвычайно медленным или расточительным,
если действительно необходимо неблокирующее поведение.
</para>
<para>
</simpara>
<simpara>
Неблокирующий цикл влияет на возвращаемое значение <methodname>parallel\Events::poll</methodname>, так что оно может быть &null; до того, как все события будут обработаны.
</para>
</simpara>
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>parallel\Events::setBlocking</methodname>
<methodparam><type>bool</type><parameter>blocking</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Устанавливает режим блокировки
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Error</type>, если для цикла установлено время ожидания.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.setinput" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.setinput">
<refnamediv>
<refname>parallel\Events::setInput</refname>
<refpurpose>Вход</refpurpose>
@@ -14,9 +13,9 @@
<modifier>public</modifier> <type>void</type><methodname>parallel\Events::setInput</methodname>
<methodparam><type>Input</type><parameter>input</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Устанавливает <parameter>input</parameter> для этого цикла событий
</para>
</simpara>
</refsect1>
</refentry>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5d927c376e2d53433ff435eea53e546b51d9834b Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events.settimeout" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events.settimeout">
<refnamediv>
<refname>parallel\Events::setTimeout</refname>
<refpurpose>Поведение</refpurpose>
@@ -10,28 +9,28 @@
<refsect1 role="description" audience="behaviour">
&reftitle.description;
<para>
<simpara>
По умолчанию при опросе событий происходит блокировка (на уровне PHP) до тех пор, пока не будет возвращено первое событие:
установка времени ожидания приводит к выбрасыванию исключения при превышении времени ожидания.
</para>
<para>
</simpara>
<simpara>
Отличается от установки режима блокировки в &false; с помощью <methodname>parallel\Events::setBlocking</methodname>, который не выбрасывает исключение.
</para>
</simpara>
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>parallel\Events::setTimeout</methodname>
<methodparam><type>int</type><parameter>timeout</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Устанавливает время ожидания в микросекундах
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Error</type>, если цикл не блокируется.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-future.cancel" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-future.cancel">
<refnamediv>
<refname>parallel\Future::cancel</refname>
<refpurpose>Прекращение</refpurpose>
@@ -12,34 +11,34 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>bool</type><methodname>parallel\Future::cancel</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Пытается прервать задание.
</para>
</simpara>
<note>
<para>
<simpara>
Если задача запущена, она будет прервана.
</para>
</simpara>
</note>
<warning>
<para>
<simpara>
Выполняющиеся внутренние вызовы функций не могут быть прерваны.
</para>
</simpara>
</warning>
</refsect1>
<refsect1 role="exceptions">
<title>Исключения</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Future\Error\Killed</type>, если <type>parallel\Runtime</type> выполнение задачи было прервано.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Future\Error\Cancelled</type>, если задача была уже прервана.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-future.cancelled" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-future.cancelled">
<refnamediv>
<refname>parallel\Future::cancelled</refname>
<refpurpose>Определение состояния</refpurpose>
@@ -12,11 +11,11 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>bool</type><methodname>parallel\Future::cancelled</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Указывает, была ли задача отменена.
</para>
</simpara>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f0a2fee71b120f8afdef2aa7967f4f678f954518 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-future.done" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-future.done">
<refnamediv>
<refname>parallel\Future::done</refname>
<refpurpose>Определение состояния</refpurpose>
@@ -12,11 +11,11 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>bool</type><methodname>parallel\Future::done</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Указывает, выполнена ли задача
</para>
</simpara>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-future.value" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-future.value">
<refnamediv>
<refname>parallel\Future::value</refname>
<refpurpose>Разрешение</refpurpose>
@@ -12,39 +11,39 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>mixed</type><methodname>parallel\Future::value</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Возвращает (и при необходимости дожидается) возврата из задания.
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Исключения</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Future\Error</type>, если ожидание не удалось (внутренняя ошибка).
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Future\Error\Killed</type>, если <type>parallel\Runtime</type> выполнение задачи было прервано.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Future\Error\Cancelled</type>, если задача была отменена.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Future\Error\Foreign</type>, если задача вызвала нераспознанное неперехваченное исключение.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>Throwable</type>, не пойманные в задаче.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 5d927c376e2d53433ff435eea53e546b51d9834b Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events-input.add" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events-input.add">
<refnamediv>
<refname>parallel\Events\Input::add</refname>
<refpurpose>Входы</refpurpose>
@@ -15,22 +14,22 @@
<methodparam><type>string</type><parameter>target</parameter></methodparam>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Устанавливает вход для заданной цели
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Input\Error\Existence</type>, если вход для цели уже существует.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Input\Error\IllegalValue</type>, если значение недопустимо (&object;, &null;).
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events-input.clear" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events-input.clear">
<refnamediv>
<refname>parallel\Events\Input::clear</refname>
<refpurpose>Входы</refpurpose>
@@ -12,11 +11,11 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>parallel\Events\Input::clear</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Удаляет ввод для всех целей
</para>
</simpara>
</refsect1>
</refentry>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-events-input.remove" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-events-input.remove">
<refnamediv>
<refname>parallel\Events\Input::remove</refname>
<refpurpose>Входы</refpurpose>
@@ -14,17 +13,17 @@
<modifier>public</modifier> <type>void</type><methodname>parallel\Events\Input::remove</methodname>
<methodparam><type>string</type><parameter>target</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Удаляет вход для данной цели
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Events\Input\Error\Existence</type>, если вход для цели не существует.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-runtime.close" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-runtime.close">
<refnamediv>
<refname>parallel\Runtime::close</refname>
<refpurpose>Изящное соединение во время выполнения</refpurpose>
@@ -12,24 +11,24 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>parallel\Runtime::close</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Запрашивает завершение работы среды выполнения.
</para>
</simpara>
<note>
<para>
<simpara>
Запланированные к выполнению задачи будут выполнены до завершения работы.
</para>
</simpara>
</note>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\Closed</type>, если <type>Runtime</type> уже был закрыт.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-runtime.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-runtime.construct">
<refnamediv>
<refname>parallel\Runtime::__construct</refname>
<refpurpose>Конструктор класса Runtime</refpurpose>
@@ -12,18 +11,18 @@
&reftitle.description;
<constructorsynopsis>
<modifier>public</modifier> <methodname>parallel\Runtime::__construct</methodname>
<void />
<void/>
</constructorsynopsis>
<para>
<simpara>
Создаёт новую среду выполнения без начальной загрузки.
</para>
</simpara>
<constructorsynopsis>
<modifier>public</modifier> <methodname>parallel\Runtime::__construct</methodname>
<methodparam><type>string</type><parameter>bootstrap</parameter></methodparam>
</constructorsynopsis>
<para>
<simpara>
Создаёт новую среду выполнения с начальной загрузкой.
</para>
</simpara>
</refsect1>
@@ -33,9 +32,9 @@
<varlistentry>
<term><parameter>bootstrap</parameter></term>
<listitem>
<para>
<simpara>
Расположение файла начальной загрузки, обычно это автозагрузчик.
</para>
</simpara>
</listitem>
</varlistentry>
</variablelist>
@@ -44,14 +43,14 @@
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error</type>, если поток не может быть создан.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Bootstrap</type>, если начальная загрузка завершилась с ошибкой.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-runtime.kill" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-runtime.kill">
<refnamediv>
<refname>parallel\Runtime::kill</refname>
<refpurpose>Соединение во время выполнения</refpurpose>
@@ -12,29 +11,29 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>void</type><methodname>parallel\Runtime::kill</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Пытается принудительно завершить работу среды выполнения.
</para>
</simpara>
<note>
<para>
<simpara>
Запланированные к выполнению задачи не будут выполнены, текущая задача будет прервана.
</para>
</simpara>
</note>
<warning>
<para>
<simpara>
Выполняющиеся внутренние вызовы функций не могут быть прерваны.
</para>
</simpara>
</warning>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\Closed</type>, если <type>Runtime</type> уже был закрыт.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 41445b3d771660805270f52adf0e421aa20f12ab Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-runtime.run" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-runtime.run">
<refnamediv>
<refname>parallel\Runtime::run</refname>
<refpurpose>Выполнение</refpurpose>
@@ -14,17 +13,17 @@
<modifier>public</modifier> <type class="union"><type>Future</type><type>null</type></type><methodname>parallel\Runtime::run</methodname>
<methodparam><type>Closure</type><parameter>task</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Планирует параллельное выполнение <parameter>task</parameter>.
</para>
</simpara>
<methodsynopsis>
<modifier>public</modifier> <type class="union"><type>Future</type><type>null</type></type><methodname>parallel\Runtime::run</methodname>
<methodparam><type>Closure</type><parameter>task</parameter></methodparam>
<methodparam><type>array</type><parameter>argv</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Планирует параллельное выполнение <parameter>task</parameter>, передавая <parameter>argv</parameter> во время выполнения.
</para>
</simpara>
</refsect1>
@@ -34,17 +33,17 @@
<varlistentry>
<term><parameter>task</parameter></term>
<listitem>
<para>
<simpara>
Замыкание (<classname>Closure</classname>) со специфическими характеристиками.
</para>
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>argv</parameter></term>
<listitem>
<para>
<simpara>
Массив (<type>array</type>) аргументов с конкретными характеристиками, которые будут переданы <parameter>task</parameter> во время выполнения.
</para>
</simpara>
</listitem>
</varlistentry>
</variablelist>
@@ -70,14 +69,14 @@
</simplelist>
</para>
<note>
<para>
<simpara>
Вложенные замыкания могут использовать yield или передачу значения по ссылке, но не должны содержать объявления классов или именованных функций.
</para>
</simpara>
</note>
<note>
<para>
<simpara>
Никакие инструкции не запрещены в файлах, которые может включать задача.
</para>
</simpara>
</note>
</refsect1>
@@ -91,73 +90,73 @@
<member>содержать внутренние объекты (смотрите примечания)</member>
</simplelist>
<note>
<para>
<simpara>
В случае ресурсов файлового потока ресурс будет преобразован в файловый дескриптор и передан как целое число (<type>int</type>),
где это возможно, не поддерживается в Windows.
</para>
</simpara>
</note>
</para>
</refsect1>
<refsect1 role="object-characteristics">
<title>Примечания к внутренним объектам</title>
<para>
<simpara>
Внутренние объекты обычно используют настраиваемую структуру, которую нельзя безопасно скопировать по значению,
в PHP в настоящее время отсутствует механизм для этого (без сериализации), и поэтому могут использоваться только объекты,
которые не используют настраиваемую структуру.
</para>
<para>
</simpara>
<simpara>
Некоторые внутренние объекты не используют настраиваемую структуру, например, <classname>parallel\Events\Event</classname> и поэтому могут использоваться совместно.
</para>
<para>
</simpara>
<simpara>
Замыкания - это особый вид внутреннего объекта, который поддерживает копирование по значению, поэтому может использоваться совместно.
</para>
<para>
</simpara>
<simpara>
Каналы играют ключевую роль в написании параллельного кода и при необходимости поддерживают одновременный доступ и выполнение, поэтому могут использоваться совместно.
</para>
</simpara>
<warning>
<para>
<simpara>
Пользовательский класс, расширяющий внутренний класс, может использовать настраиваемую структуру, определённую внутренним классом,
и в этом случае они не могут быть безопасно скопированы по значению и поэтому не могут использоваться совместно.
</para>
</simpara>
</warning>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<warning>
<para>
<simpara>
Нельзя игнорировать возвращаемый <type>parallel\Future</type>, если задача содержит оператор return или throw.
</para>
</simpara>
</warning>
</refsect1>
<refsect1 role="exceptions">
<title>Исключения</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\Closed</type>, если <type>parallel\Runtime</type> был закрыт.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\IllegalFunction</type>, если <parameter>task</parameter> является замыканием, созданным из внутренней функции.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\IllegalInstruction</type>, если <parameter>task</parameter> содержит недопустимые инструкции.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\IllegalParameter</type>, если <parameter>task</parameter> принимает или <parameter>argv</parameter> содержит недопустимые переменные.
</para>
</simpara>
</warning>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Runtime\Error\IllegalReturn</type>, если <parameter>task</parameter> возвращается некорректно.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-sync.construct" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-sync.construct">
<refnamediv>
<refname>parallel\Sync::__construct</refname>
<refpurpose>Конструктор класса</refpurpose>
@@ -12,28 +11,28 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <methodname>parallel\Sync::__construct</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Создаёт новый объект синхронизации без значения.
</para>
</simpara>
<methodsynopsis>
<modifier>public</modifier> <methodname>parallel\Sync::__construct</methodname>
<methodparam><type>scalar</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Создаёт новый объект синхронизации, содержащий заданное скалярное значение.
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Sync\Error\IllegalValue</type>, если <parameter>value</parameter> не является скалярным значением.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-sync.get" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-sync.get">
<refnamediv>
<refname>parallel\Sync::get</refname>
<refpurpose>Доступ</refpurpose>
@@ -12,11 +11,11 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>scalar</type><methodname>parallel\Sync::get</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Автоматически возвращает значение объектов синхронизации.
</para>
</simpara>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-sync.invoke" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-sync.invoke">
<refnamediv>
<refname>parallel\Sync::__invoke</refname>
<refpurpose>Синхронизация</refpurpose>
@@ -14,9 +13,9 @@
<modifier>public</modifier> <methodname>parallel\Sync::__invoke</methodname>
<methodparam><type>callable</type><parameter>critical</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Должен быть включён исключительно в критический код.
</para>
</simpara>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-sync.notify" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-sync.notify">
<refnamediv>
<refname>parallel\Sync::notify</refname>
<refpurpose>Синхронизация</refpurpose>
@@ -14,9 +13,9 @@
<modifier>public</modifier> <methodname>parallel\Sync::notify</methodname>
<methodparam choice="opt"><type>bool</type><parameter>all</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Уведомляет один (по умолчанию) или все потоки, ожидающие объекта синхронизации.
</para>
</simpara>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 52bf027d4cb01fee7d4e33095d3c5ecd6f76fff1 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-sync.set" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-sync.set">
<refnamediv>
<refname>parallel\Sync::set</refname>
<refpurpose>Доступ</refpurpose>
@@ -14,18 +13,18 @@
<modifier>public</modifier> <methodname>parallel\Sync::set</methodname>
<methodparam><type>scalar</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
<simpara>
Атомарно устанавливает значение объекта синхронизации.
</para>
</simpara>
</refsect1>
<refsect1 role="exceptions">
<title>Ошибки</title>
<warning>
<para>
<simpara>
Выбрасывает <type>parallel\Sync\Error\IllegalValue</type>, если <parameter>value</parameter> не является скалярным значением.
</para>
</simpara>
</warning>
</refsect1>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d9ecfba6ad07e4e0b1b13ed1f0592f09d2e2f5c9 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="parallel-sync.wait" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel-sync.wait">
<refnamediv>
<refname>parallel\Sync::wait</refname>
<refpurpose>Синхронизация</refpurpose>
@@ -12,11 +11,11 @@
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <methodname>parallel\Sync::wait</methodname>
<void />
<void/>
</methodsynopsis>
<para>
<simpara>
Ожидает уведомления об этом объекте синхронизации.
</para>
</simpara>
</refsect1>

View File

@@ -1,56 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: c7e29d3ab5328b52f83edb88bde973e211a37659 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="philosophy.parallel" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="philosophy.parallel">
<title>Философия</title>
<para>
<simpara>
Раздел содержит основные принципы, важные для написания параллельного кода и некоторые подробности о внутренней реализации parallel.
</para>
</simpara>
<simplesect role="sharing">
<title>Не общайтесь, разделяя память; вместо этого поделитесь памятью, с помощью общения.</title>
<para>
<simpara>
Эта философия, которой придерживается parallel, берёт своё начало из Go, одной из самых популярных из используемых платформ для написания параллельного кода в настоящее время.
Программисты на Go должны упорно трудиться, чтобы соответствовать этому идеалу: PHP и параллельный интерфейс делают всю тяжёлую работу за программиста,
причём по умолчанию.
</para>
<para>
</simpara>
<simpara>
В традиционных моделях потоковой передачи, встречающихся в других языках, потоки обычно обмениваются данными друг с другом только благодаря тому факту, что они работают в одном и том же адресном пространстве.
Программист должен использовать взаимное исключение, переменные условия и другие низкоуровневые примитивы потоковой передачи или синхронизации, чтобы обеспечить надлежащую передачу состояния и согласованность.
</para>
<para>
</simpara>
<simpara>
Когда обычная модель инвертирована, это означает, что потоки совместно используют память только в результате обмена данными (например, переменная передаётся по каналу).
</para>
<para>
</simpara>
<simpara>
Когда parallel передаёт переменную из одного потока в другой любым способом - аргументами задачи, возвратом через Future и каналами - она передаётся по значению.
Во всех случаях, кроме небуферизованных каналов, переменная также буферизуется, поэтому она не может измениться (или быть уничтожена) до того, как она будет использована в любом потоке,
в который передаётся переменная. Небуферизованное чтение по каналу - единственный случай, когда поток непосредственно читает память,
выделенную другим потоком, это можно сделать безопасно, потому что поток, владеющий памятью, ожидает завершения чтения, прежде чем он сможет продолжить управлять им, и поток, которому не принадлежит память, читает по значению.
Когда оба потока продолжают работу, они больше не разделяют память.
</para>
<para>
</simpara>
<simpara>
Это значительно упрощает написание параллельного кода и рассуждения о нём по сравнению с традиционной моделью многопоточности.
Это означает, что программисту не нужно учитывать, что потоки могут одновременно управлять данными, потому что это невозможно.
</para>
<para>
</simpara>
<simpara>
Это также делает PHP идеальной платформой для реализации API параллельного кода на основе CSP (передача сообщений по каналам),
поскольку сам PHP ничего не разделяет - потоки PHP по умолчанию работают в собственном виртуальном адресном пространстве и поэтому могут совместно использовать память только путём обмена данными.
</para>
</simpara>
</simplesect>
<simplesect role="owning">
<title>У данных должен быть окончательный единственный владелец</title>
<para>
<simpara>
Приближаясь к модели CSP в первый раз, программист, разбирающийся в традиционной модели потоковой передачи,
может обнаружить, что ищет параллельные структуры данных, потому что это то,
что они тоже используют: они передают общие объекты для управления.
</para>
<para>
</simpara>
<simpara>
Когда дело доходит до модели CSP, нет необходимости в том, чтобы структуры данных совместно использовались многими задачами и действительно,
это проще, если это не так. Данные должны принадлежать одной задаче, изменения (или операции) в этой структуре данных должны передаваться по каналам
и выполняться владельцем данных, успешное выполнение, ошибка или результат (состояние) изменения (или операции) передаётся обратно.
</para>
<para>
</simpara>
<simpara>
Опять же, природа PHP ничего не разделяет и природа параллельного копирования по значению помогают программисту достичь этой цели, никакие данные не будут переданы случайно, только в результате обмена данными.
</para>
</simpara>
</simplesect>
</chapter>
<!-- Keep this comment at the end of the file

View File

@@ -1,46 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: cd79fb394a828438dd73e32f53f0a2e96f3722b3 Maintainer: sergey Status: ready -->
<!-- EN-Revision: 57c7669a1f5336cb17413e0b46540c52c77ee84f Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="parallel.setup" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="parallel.setup">
<title>Установка</title>
<simplesect xml:id="parallel.requirements">
&reftitle.required;
<para>
<simpara>
Для работы модуля parallel требуется сборка PHP с поддержкой режима ZTS (Zend Thread Safety).
Потокобезопасный режим включают при компиляции через ключ <option role="configure">--enable-zts</option>,
а до PHP 8.0.0 на системах, которые отличаются от ОС Windows, — ключ <option role="configure">--enable-maintainer-zts</option>.
</para>
</simpara>
<caution>
<para>
<simpara>
Режим Zend Thread Safety нельзя включить после сборки; это вариант конфигурации во время сборки.
</para>
</simpara>
</caution>
<para>
<simpara>
Модуль parallel требуется собирать в системах, в которых работает заголовочный файл pthread.h стандарта
реализации потоков POSIX Threads и ZTS-сборка PHP, включая системы Windows с библиотекой многопоточности
проекта pthread-w32 компании Red Hat.
</para>
</simpara>
</simplesect>
<simplesect xml:id="parallel.installation">
&reftitle.install;
<para>
<simpara>
Выпуски модуля parallel размещаются в репозитории PECL, а исходный код —
на сайте <link xlink:href="&url.git.hub;krakjoe/parallel">GitHub</link>,
Самый простой способ установки — обычный маршрут PECL:
<link xlink:href="&url.pecl.package;parallel">&url.pecl.package;parallel</link>.
</para>
<para>
</simpara>
<simpara>
Пользователям ОС Windows готовые двоичные файлы
доступны на сайте репозитория <link xlink:href="&url.pecl.package;parallel">PECL</link>.
</para>
</simpara>
<caution>
<para>
<simpara>
Пользователям ОС Windows потребуется сделать дополнительный шаг
и добавить файл <filename>pthreadVC<replaceable>?</replaceable>.dll</filename>,
который распространяется вместе с выпусками Windows, в свою переменную окружения <envar>PATH</envar>.
</para>
</simpara>
</caution>
</simplesect>