Ev Ev 클래스

(PECL ev >= 0.2.0)


소개

Ev는 기본 루프 및 일부 일반 작업에 대한 액세스를 제공하는 정적 클래스입니다.


클래스 개요

                  
final class Ev {

  /* Constants */
  const int FLAG_AUTO = 0;
  const int FLAG_NOENV = 16777216;
  const int FLAG_FORKCHECK = 33554432;
  const int FLAG_NOINOTIFY = 1048576;
  const int FLAG_SIGNALFD = 2097152;
  const int FLAG_NOSIGMASK = 4194304;
  const int RUN_NOWAIT = 1;
  const int RUN_ONCE = 2;
  const int BREAK_CANCEL = 0;
  const int BREAK_ONE = 1;
  const int BREAK_ALL = 2;
  const int MINPRI = -2;
  const int MAXPRI = 2;
  const int READ = 1;
  const int WRITE = 2;
  const int TIMER = 256;
  const int PERIODIC = 512;
  const int SIGNAL = 1024;
  const int CHILD = 2048;
  const int STAT = 4096;
  const int IDLE = 8192;
  const int PREPARE = 16384;
  const int CHECK = 32768;
  const int EMBED = 65536;
  const int CUSTOM = 16777216;
  const int ERROR = 2147483648;
  const int BACKEND_SELECT = 1;
  const int BACKEND_POLL = 2;
  const int BACKEND_EPOLL = 4;
  const int BACKEND_KQUEUE = 8;
  const int BACKEND_DEVPOLL = 16;
  const int BACKEND_PORT = 32;
  const int BACKEND_ALL = 63;
  const int BACKEND_MASK = 65535;

  /* Methods */
  final public static backend(): int
  final public static depth(): int
  final public static embeddableBackends(): int
  final public static feedSignal( int $signum ): void
  final public static feedSignalEvent( int $signum ): void
  final public static iteration(): int
  final public static now(): float
  final public static nowUpdate(): void
  final public static recommendedBackends(): int
  final public static resume(): void
  final public static run( int $flags = ?): void
  final public static sleep( float $seconds ): void
  final public static stop( int $how = ?): void
  final public static supportedBackends(): int
  final public static suspend(): void
  final public static time(): float
  final public static verify(): void
}
                  
                

미리 정의된 상수

루프를 만들기 위해 전달된 플래그:

Ev::FLAG_AUTO
기본 플래그 값
Ev::FLAG_NOENV
이 플래그가 사용되면(또는 프로그램이 setuid 또는 setgid를 실행하면) libev는 환경 변수 LIBEV_FLAGS를 확인하지 않습니다. 그렇지 않으면(기본적으로) LIBEV_FLAGS가 발견되면 플래그를 완전히 무시합니다. 성능 테스트 및 버그 검색에 유용합니다.
Ev::FLAG_FORKCHECK
EvLoop::fork()를 수동으로 호출하는 대신 libev가 각 반복에서 포크를 확인하도록 합니다. 이것은 루프의 모든 반복에서 getpid()를 호출하여 작동하므로 많은 루프 반복으로 이벤트 루프가 느려질 수 있지만 일반적으로 눈에 띄지 않습니다. 이 플래그 설정은 LIBEV_FLAGS 환경 변수에서 재정의하거나 지정할 수 없습니다.
Ev::FLAG_NOINOTIFY
이 플래그가 지정되면 libev» ev_stat 감시자에 대해 inotify API를 사용하려고 시도하지 않습니다. 플래그는 inotify 파일 디스크립터를 보존하는 데 유용할 수 있습니다. 그렇지 않으면 ev_stat 감시자를 사용하는 각 루프가 하나의 inotify 핸들을 사용하기 때문입니다.
Ev::FLAG_SIGNALFD
이 플래그가 지정되면 libev» ev_signal(및 » ev_child) 감시자에 대해 signalfd API를 사용하려고 시도합니다. 이 API는 신호를 동기식으로 전달하므로 속도가 더 빨라지고 대기 중인 신호 데이터를 가져올 수 있습니다. 또한 신호가 스레드에서 적절히 차단되는 한 스레드로 신호 처리를 단순화할 수도 있습니다. Signalfd는 기본적으로 사용되지 않습니다.
Ev::FLAG_NOSIGMASK
이 플래그가 지정되면 libev는 신호 마스크 수정을 방지합니다. 특히, 이는 신호를 수신하기 전에 신호가 차단 해제되었는지 확인해야 함을 의미합니다.

이 동작은 사용자 지정 신호 처리 또는 특정 스레드에서만 신호를 처리하는 데 유용합니다.

Ev::run() 또는 EvLoop::run() 에 전달된 플래그

Ev::RUN_NOWAIT
이벤트 루프가 새 이벤트를 찾고 해당 이벤트와 이미 처리되지 않은 이벤트를 처리하지만 이벤트가 없는 경우 프로세스를 기다리거나 차단하지 않고 루프를 한 번 반복한 후에 반환됨을 의미합니다. 이는 프로그램 응답을 유지하기 위해 긴 계산을 수행하는 동안 새 이벤트를 폴링하고 처리하는 데 유용합니다.
Ev::RUN_ONCE
이벤트 루프가 새 이벤트를 찾고(필요한 경우 대기) 해당 이벤트와 이미 처리되지 않은 이벤트를 처리합니다. 최소한 하나의 새 이벤트가 도착할 때까지 프로세스를 차단하고(libev 자체의 내부 이벤트일 수 있으므로 사용자 등록 콜백이 호출된다는 보장이 없음) 루프를 한 번 반복한 후에 반환됩니다.

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
EvChild::__construct()에 지정된 pid가 상태 변경을 수신했습니다.
Ev::STAT
EvStat 감시자에 지정된 경로가 속성을 변경했습니다.
Ev::IDLE
EvIdle 감시자는 다른 감시자와 아무 관련이 없을 때 작동합니다.
Ev::PREPARE
모든 EvPrepare 감시자는 Ev::run()이 시작되기 직전에 호출됩니다. 따라서 EvPrepare 감시자는 이벤트 루프가 절전 모드로 전환되거나 새 이벤트를 폴링하기 전에 호출된 마지막 감시자입니다.
Ev::CHECK
모든 EvCheck 감시자는 Ev::run()이 새 이벤트를 수집한 직후에 큐에 대기되지만 수신된 이벤트에 대한 콜백을 큐에 추가하기 전입니다. 따라서 EvCheck 감시자는 이벤트 루프 반복 내에서 우선 순위가 같거나 낮은 다른 감시자보다 먼저 호출됩니다.
Ev::EMBED
EvEmbed 감시자에 지정된 포함된 이벤트 루프는 주의가 필요합니다.
Ev::CUSTOM
libev 자체에서 전송(또는 다른 방식으로 사용)된 적이 없지만 감시자에게 신호를 보내기 위해 libev 사용자가 자유롭게 사용할 수 있습니다(예: EvWatcher::feed()를 통해).
Ev::ERROR
지정되지 않은 오류가 발생하여 감시자가 중지되었습니다. 이것은 libev에 메모리가 부족하거나 파일 설명자가 닫혀 있거나 다른 문제로 인해 감시자가 제대로 시작되지 않았기 때문에 발생할 수 있습니다. Libev는 이러한 애플리케이션 버그를 고려합니다. 또한 보기 » ANATOMY OF A WATCHER

백엔드 플래그:

Ev::BACKEND_SELECT
select(2) backend
Ev::BACKEND_POLL
poll(2) backend
Ev::BACKEND_EPOLL
2.6.9 이전 및 이후 커널 모두에 대한 Linux 전용 epoll(7) 백엔드
Ev::BACKEND_KQUEUE
대부분의 BSD 시스템에서 사용되는 kqueue 백엔드. EvEmbed 감시자는 하나의 루프(kqueue 백엔드 포함)를 다른 루프에 포함하는 데 사용할 수 있습니다. 예를 들어 kqueue 백엔드를 사용하여 이벤트 루프를 만들고 소켓에만 사용할 수 있습니다.
Ev::BACKEND_DEVPOLL
솔라리스 8 백엔드. 이것은 아직 구현되지 않았습니다.
Ev::BACKEND_PORT
확장성이 좋은 Solaris 10 이벤트 포트 메커니즘.
Ev::BACKEND_ALL
모든 백엔드(손상된 백엔드도 포함)를 시도하십시오. 명시적으로 사용하지 않는 것이 좋습니다. 비트 연산자는 여기에 적용해야 합니다(예: Ev::BACKEND_ALL & ~ Ev::BACKEND_KQUEUE ) Ev::recommendedBackends() 를 사용하거나 백엔드를 전혀 지정하지 마십시오.
Ev::BACKEND_MASK
백엔드가 아니라 flags 값에서 모든 백엔드 비트를 선택하여 백엔드를 마스크 아웃하는 마스크입니다(예: LIBEV_FLAGS 환경 변수를 수정할 때).

메모: 모듈 초기화 단계 중 기본 루프의 경우 Ev는 pthread_atfork(사용 가능한 경우)를 통해 » ev_loop_fork 호출을 등록합니다.

메모:

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 — 이벤트 확인 시작 및 기본 루프에 대한 콜백 호출
  • Ev::sleep — 주어진 시간(초) 동안 프로세스 차단
  • Ev::stop — 기본 이벤트 루프를 중지합니다.
  • Ev::supportedBackends — 현재 libev 구성에서 지원하는 백엔드 세트를 반환합니다.
  • Ev::suspend — 기본 이벤트 루프 일시 중단
  • Ev::time — Epoch 이후의 현재 시간을 소수 초 단위로 반환합니다.
  • Ev::verify — 내부 일관성 검사 수행(디버깅용)