Класс Ev
(PECL ev >= 0.2.0)
Введение
Класс EV является статическим классом, обеспечивая доступ к циклу по умолчанию и некоторым распространенным операциям.
Обзор классов
Предопределенные константы
Флаги, передаваемые при создании цикла:
-
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
не будет пытаться использовать APIinotify
для своих наблюдателей » ev_stat Флаг может быть полезным для сохранения файловых дескрипторов inotify, в противном случае каждый цикл, использующий наблюдателейev_stat
, будет потреблять один дескрипторinotify
. -
Ev::FLAG_SIGNALFD
-
Если флаг указан, то
libev
будет пытаться использовать APIsignalfd
для своих наблюдателей » 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 — Производит внутренную проверку целосности(для отладки)