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

135 lines
7.6 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: sergey Status: ready -->
<!-- Reviewed: no -->
<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 ≥ 7.2.0.
Начиная с parallel 1.2.0, требуется PHP ≥ 8.0.0.
</simpara>
<simpara>
Краткое описание основных понятий параллельных процессов описано ниже, более подробную информацию можно найти в этом разделе руководства.
</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>use by-reference</simpara>
</listitem>
<listitem>
<simpara>declare class</simpara>
</listitem>
<listitem>
<simpara>declare named function</simpara>
</listitem>
</itemizedlist>
</para>
<note>
<simpara>
Вложенные замыкания могут содержать "yield" или "use by-reference", но не должны содержать объявления классов или именованных функций.
</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> обеспечивает двунаправленную связь между задачами, <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
-->