1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 00:32:15 +01:00
Files
archived-doc-ru/reference/ev/evio.xml
2024-06-14 17:02:33 +01:00

133 lines
6.1 KiB
XML
Raw 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: 33e5f4ef7243bc1282acb1cba93e8f99c1debe68 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.evio" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Класс EvIo</title>
<titleabbrev>EvIo</titleabbrev>
<partintro>
<!-- {{{ EvIo intro -->
<section xml:id="evio.intro">
&reftitle.intro;
<para>
Наблюдатели <classname>EvIo</classname> проверяют, является ли
файл, сокет или поток, преобразуемый в числовой дескриптор файла,
доступным на чтение или на запись при каждой итерации событийного цикла,
или, если более точно, когда чтение не заблокирует процесс, а запись
сможет быть произведена. Такое поведение называется
<emphasis>переключение уровня (level-triggering)</emphasis>, потому, что
события будут создаваться все время, пока сохраняется отслеживаемое состояние.
Для прекращения создания событий надо просто остановить наблюдателя.
</para>
<para>
Количество таких наблюдателей для одного файлового дескриптора
<parameter>fd</parameter> не ограничено. Желательно, но не обязательно,
установить для файлового дескриптора неблокирующий режим.
</para>
<para>
Другой момент, который необходимо держать в уме, это то, что
всегда существует возможность ложного срабатывания. Например
<constant>Ev::READ</constant> вызовет callback-функцию, но в
то же время файл заблокируется подзапросом <emphasis>read()</emphasis>.
В такую ситуацию очень легко попасть и именно поэтому рекомендуется
всегда использовать неблокирующий ввод/вывод. Возврат
<emphasis>read()</emphasis> дополнительного <constant>EAGAIN</constant>
гораздо предпочтительнее, чем "зависание" программы в ожидании данных.
</para>
<para>
Если по каким то причинам невозможно использовать
<parameter>fd</parameter> в неблокирующем режиме, то имеет смысл
дополнительно проверять, доступен ли файл на чтение в данный конкретный момент.
Кто-то дополнительно использует <constant>SIGALRM</constant> и внутренний
таймер для проверки, что блокировка не вечная.
</para>
<para>
Старайтесь всегда использовать неблокирующий режим.
</para>
</section>
<!-- }}} -->
<section xml:id="evio.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass>
<classname>EvIo</classname>
</ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<classname>EvIo</classname>
</ooclass>
<ooclass>
<modifier>extends</modifier>
<classname>EvWatcher</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Properties;</classsynopsisinfo>
<fieldsynopsis>
<modifier>public</modifier>
<varname linkend="evio.props.fd">fd</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>public</modifier>
<varname linkend="evio.props.events">events</varname>
</fieldsynopsis>
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('evwatcher.synopsis')/descendant::db:fieldsynopsis)" />
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evio')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[not(@role='procedural')])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evio')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])"/>
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evwatcher')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
</classsynopsis>
<!-- }}} -->
</section>
<!-- {{{ EvIo properties -->
<section xml:id="evio.props">
&reftitle.properties;
<variablelist>
<varlistentry xml:id="evio.props.fd">
<term>
<varname>fd</varname>
</term>
<listitem>
<para></para>
</listitem>
</varlistentry>
<varlistentry xml:id="evio.props.events">
<term>
<varname>events</varname>
</term>
<listitem>
<para></para>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- }}} -->
</partintro>
&reference.ev.entities.evio;
</reference><!-- 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
-->