2024 年 PHP 日本大会

EvLoop 类

(PECL ev >= 0.2.0)

简介

表示一个事件循环,它始终与默认循环不同。与默认循环不同,它无法处理EvChild 观察者。

有了线程,我们必须为每个线程创建一个循环,并在父线程中使用默认循环

默认事件循环Ev自动初始化。可以通过Ev类的的方法访问,或者通过EvLoop::defaultLoop()方法访问。

类概要

final class EvLoop {
/* 属性 */
public $data;
public $backend;
public $iteration;
public $pending;
public $io_interval;
public $depth;
/* 方法 */
public __construct(
     int $flags = ?,
     mixed $data = NULL,
     float $io_interval = 0.0,
     float $timeout_interval = 0.0
)
public backend(): int
final public check( string $callback , string $data = ?, string $priority = ?): EvCheck
final public child(
     string $pid,
     string $trace,
     string $callback,
     string $data = ?,
     string $priority = ?
): EvChild
public static defaultLoop(
     int $flags = Ev::FLAG_AUTO,
     mixed $data = NULL,
     float $io_interval = 0.,
     float $timeout_interval = 0.
): EvLoop
final public embed(
     string $other,
     string $callback = ?,
     string $data = ?,
     string $priority = ?
): EvEmbed
final public fork( callable $callback , mixed $data = null , int $priority = 0 ): EvFork
final public idle( callable $callback , mixed $data = null , int $priority = 0 ): EvIdle
final public io(
     mixed $fd,
     int $events,
     callable $callback,
     mixed $data = null,
     int $priority = 0
): EvIo
public loopFork(): void
public now(): float
public nowUpdate(): void
final public periodic(
     float $offset,
     float $interval,
     callable $callback,
     mixed $data = null,
     int $priority = 0
): EvPeriodic
final public prepare( callable $callback , mixed $data = null , int $priority = 0 ): EvPrepare
public resume(): void
public run( int $flags = 0 ): void
final public signal(
     int $signum,
     callable $callback,
     mixed $data = null,
     int $priority = 0
): EvSignal
final public stat(
     字符串 $path,
     float $interval,
     callable $callback,
     mixed $data = null,
     int $priority = 0
): EvStat
public stop( 整数 $how = ?): void
public suspend(): void
final public timer(
     浮点数 $after,
     浮点数 $repeat,
     callable $callback,
     mixed $data = null,
     int $priority = 0
): EvTimer
public verify(): void
}

属性

data

附加到循环的自定义数据

backend

只读 . 指示正在使用的事件后端的后端标志

is_default_loop

只读 . 如果它是默认事件循环,则为true

iteration

循环的当前迭代计数。参见 Ev::iteration()

pending

挂起的观察者数量。0 表示没有观察者挂起。

io_interval

较高的io_interval 允许libev 花更多时间收集EvIo 事件,因此每次迭代可以处理更多事件,但代价是增加延迟。超时(EvPeriodicEvTimer)不会受到影响。将其设置为非零值将在大多数循环迭代中引入额外的sleep()调用。睡眠时间确保libev 平均不会比此间隔内每隔一次更频繁地轮询EvIo 事件。许多程序通常可以通过将io_interval 设置为接近0.1 的值来获益,这对于交互式服务器(不适用于游戏)通常就足够了。将其设置为低于0.01 的值通常没有意义,因为这接近大多数系统的计时粒度。

另请参见 » 控制事件循环的函数

timeout_interval

较高的timeout_interval 允许libev 花更多时间收集超时,但代价是增加延迟/抖动/不精确性(观察者回调将稍后调用)。EvIo 观察者不会受到影响。将其设置为非空值不会在libev 中引入任何开销。另请参见 » 控制事件循环的函数

depth

递归深度。参见 Ev::depth()

目录

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top