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 — 내부 일관성 검사 수행(디버깅용)