Класс Ev
(PECL ev >= 0.2.0)
Введение
Класс EV — статический класс, который обеспечивает доступ к циклу
по умолчанию и некоторым общим операциям.
Обзор класса
final
class Ev
{
/* Константы */
/* Методы */
final
public
static
function depth ():
int
final
public
static
function now ():
float
final
public
static
function run (
int $flags
= ?):
void
final
public
static
function stop (
int $how
= ?):
void
}
Предопределённые константы
Флаги, передаваемые при создании цикла:
-
Ev::FLAG_AUTO
-
Задаёт флагам значение по умолчанию.
-
Ev::FLAG_NOENV
-
Если флаг используется (или программа запускает флаг доступа пользователя setuid или флаг доступа группы setgid),
то модуль
libev не смотрит на переменную окружения
LIBEV_FLAGS. Иначе (по умолчанию), если модуль нашёл переменную окружения
LIBEV_FLAGS, то он полностью переопределяет флаги.
Полезно для тестов производительности и поиска ошибок.
-
Ev::FLAG_FORKCHECK
-
Заставляет модуль libev проверять ветвление в каждой итерации, вместо вызова
метода EvLoop::fork() вручную. Это работает путём вызова
getpid() на каждой итерации цикла, и, таким образом, это может
замедлить работу цикла событий с большим количеством итераций цикла, но обычно не
сильно. Этот флаг нельзя переопределять или указывать в переменной среды
LIBEV_FLAGS.
-
Ev::FLAG_NOINOTIFY
-
Если этот флаг указали, модуль
libev
не будет пытаться использовать API inotify для своих наблюдателей
» ev_stat
Флаг бывает полезным для сохранения файловых дескрипторов inotify,
иначе каждый цикл, который использует наблюдателей ev_stat,
будет потреблять один дескриптор inotify.
-
Ev::FLAG_SIGNALFD
-
Если флаг указали, модуль
libev
будет пытаться использовать API signalfd
для своих наблюдателей
» ev_signal
(и » ev_child).
API передаёт сигналы синхронно, что делает его быстрее и, возможно, даст
получить данные из очереди сигналов, а также упрощает обработку сигналов
через потоки, поскольку сигналы корректно блокируются в потоках.
Signalfd не используется по умолчанию.
-
Ev::FLAG_NOSIGMASK
-
Если указали флаг, модуль
libev
будет избегать изменения маски сигнала. В частности, это применяется, чтобы перед
получением сигнала убедиться, что он разблокирован.
Такое поведение полезно для обработки пользовательских сигналов или обработки
сигналов только конкретных потоков.
Флаги, которые передают в метод Ev::run()
или метод EvLoop::run()
-
Ev::RUN_NOWAIT
-
Означает, что цикл событий будет искать и обрабатывать новые события, а также любые
ожидающие выполнения события из них, но не будет ждать и блокировать процесс
в случае, если не было никаких событий и завершится после одной итерации цикла.
Это иногда полезно для опроса и обработки новых событий во время выполнения
длительных вычислений, сохраняя при этом возможность взаимодействия с программой.
-
Ev::RUN_ONCE
-
Означает, что цикл событий будет искать новые события (ожидая, если потребуется)
и обрабатывать эти и любые уже ожидающие события из них.
Цикл событий будет блокировать процесс, пока не поступит хотя бы одно новое событие
(им может оказаться внутреннее событие модуля libev, поэтому нет никакой гарантии, что будет
вызвана заданная callback-функция) и завершится после одной итерации цикла.
Флаги, которые передают
в метод Ev::stop()
или метод EvLoop::stop()
-
Ev::BREAK_CANCEL
-
Отмена операции прерывания.
-
Ev::BREAK_ONE
-
Возвращает самый глубокий запрос
метода Ev::run()
(или метода EvLoop::run() ).
-
Ev::BREAK_ALL
-
Завершает все вложенные вызовы
метода Ev::run()
(или метода EvLoop::run() ).
Приоритеты наблюдателей:
-
Ev::MINPRI
-
Минимально допустимый приоритет наблюдателя.
-
Ev::MAXPRI
-
Максимально допустимый приоритет наблюдателя.
Битовые маски (полученных) событий:
-
Ev::READ
-
Дескриптор файла в наблюдателе
EvIo
доступен для чтения.
-
Ev::WRITE
-
Дескриптор файла в наблюдателе
EvIo
доступен для записи.
-
Ev::TIMER
-
EvTimer
наблюдает за превышением лимита времени.
-
Ev::PERIODIC
-
EvPeriodic
наблюдает за превышением лимита времени.
-
Ev::SIGNAL
-
Сигнал, который указали в методе
EvSignal::__construct() ,
получен.
-
Ev::CHILD
-
Идентификатор
pid, который
указали в методе
EvChild::__construct() ,
получил изменение статуса.
-
Ev::STAT
-
Путь, который указали в наблюдателе
EvStat ,
поменял свои атрибуты.
-
Ev::IDLE
-
Наблюдатель EvIdle
работает, когда остальные наблюдатели ничего не делают.
-
Ev::PREPARE
-
Все наблюдатели
EvPrepare
вызываются непосредственно перед запуском
метода Ev::run() .
Поэтому наблюдатели
EvPrepare —
последние наблюдатели, которые вызываются перед тем,
как цикл событий переходит в режим сна или опрашивает новые события.
-
Ev::CHECK
-
Все наблюдатели
EvCheck
помещаются в очередь сразу после того, как
метод Ev::run()
собрал новые события, но до того, как они вызовут какую-либо callback-функцию
для полученных событий.
Поэтому наблюдатели
EvCheck
будут вызваны раньше, чем любые другие наблюдатели с таким же
либо более низким приоритетом в этой итерации цикла событий.
-
Ev::EMBED
-
Встроенный цикл событий, который задали в наблюдателе
EvEmbed ,
требует к себе внимания.
-
Ev::CUSTOM
-
Никогда не посылается (или иным образом используется) библиотекой
libev
самостоятельно, но может свободно использоваться пользователями
libev
для сигнализирующих наблюдателей (т. е. через метод
EvWatcher::feed()
).
-
Ev::ERROR
-
Произошла неизвестная ошибка и наблюдатель будет остановлен.
Ошибка могла произойти из-за некорректного запуска наблюдателя, потому что
модулю
libev
не хватило памяти, дескриптор файла оказался закрытым
или возникла другая проблема.
Модуль Libev
считает такие ошибки ошибками приложения.
Дополнительные сведения даёт раздел
» Анатомия наблюдателей
Флаги бэкенда:
-
Ev::BACKEND_SELECT
-
выбор бэкенда — select(2)
-
Ev::BACKEND_POLL
-
опрос бэкенда — poll(2)
-
Ev::BACKEND_EPOLL
-
Специфичный для Linux бэкенд
epoll(7)
для ядер до и после 2.6.9
-
Ev::BACKEND_KQUEUE
-
kqueue —
бэкенд большинства BSD-систем.
Наблюдатель EvEmbed
можно использовать для вставки одного цикла (с бэкендом kqueue)
в другой. Например, можно попытаться создать цикл событий
с бэкендом kqueue
и использовать его только для сокетов.
-
Ev::BACKEND_DEVPOLL
-
Бэкенд Solaris 8. Пока не реализовали.
-
Ev::BACKEND_PORT
-
Механизм порта событий с хорошим масштабированием в Solaris 10.
-
Ev::BACKEND_ALL
-
Пробовать все бэкенды (кроме испорченных).
Не рекомендуется использовать напрямую.
Тут необходимо использовать побитовые операции
(т. е.
Ev::BACKEND_ALL & ~ Ev::BACKEND_KQUEUE ).
Вызывать метод Ev::recommendedBackends() , или не задавать никакого бэкенда.
-
Ev::BACKEND_MASK
-
Не бэкенд, но маска для выбора всех битов бэкендов из значения
flags, чтобы
исключить какие-либо бэкенды
(т. е. когда модифицируется переменная окружения
LIBEV_FLAGS).
Замечание:
Для цикла по умолчанию во время фазы инициализации
модуля Ev регистрируется вызов
» >ev_loop_fork
через pthread_atfork (если такой имеется).
Замечание:
Есть методы, которые разрешают получить доступ к циклу событий по
умолчанию в классе Ev (например,
методы Ev::iteration() , Ev::depth()
и т. д.). Для пользовательских циклов (которые создали методом
EvLoop::__construct() ) эти значения могут быть доступны
через соответствующие свойства и методы класса EvLoop .
Экземпляр цикла событий по умолчанию можно извлечь
методом EvLoop::defaultLoop() .
Содержание
- Ev::backend — Возвращает целое число, описывающее бэкенд, используемый libev
- Ev::depth — Получить глубину рекурсии
- Ev::embeddableBackends — Возвращает набор бэкендов, которые можно встроить в прочие событийные циклы
- Ev::feedSignal — Передаём событие сигнала в Ev
- Ev::feedSignalEvent — Послать событие сигнала в цикл по умолчанию
- Ev::iteration — Получить количество произведённых опросов цикла по умолчанию на предмет новых событий
- Ev::now — Получить время запуска последней итерации цикла по умолчанию
- Ev::nowUpdate — Устанавливает текущее время путём запроса к ядру в процессе обновляя
время, возвращаемое Ev::now
- Ev::recommendedBackends — Получить битовую маску рекомендованных бэкендов для данной платформы
- Ev::resume — Возобновить выполнение приостановленного ранее событийного цикла по умолчанию
- Ev::run — Начать проверку наличия событий и вызов callback-функций цикла по умолчанию
- Ev::sleep — Блокировать процесс заданное количество секунд
- Ev::stop — Останавливает событийный цикл по умолчанию
- Ev::supportedBackends — Возвращает набор бэкендов, поддерживаемых текущей конфигурацией libev
- Ev::suspend — Приостановить событийный цикл по умолчанию
- Ev::time — Возвращает текущее время в секундах(дробное число) прошедшее с начала эпохи Unix
- Ev::verify — Производит внутреннюю проверку целостности(для отладки)
Пользователи ещё не добавляли примечания для страницы