PHP Conference Japan 2024

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
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
公開 resume(): void
公開 run( int $flags = 0 ): void
final public signal(
     int $signum,
     可呼叫的 (callable) $callback,
     混合型別 (mixed) $data = null (空值),
     整數 (int) $priority = 0
): EvSignal
final public stat(
     string $path,
     浮點數 (float) $interval,
     可呼叫的 (callable) $callback,
     混合型別 (mixed) $data = null (空值),
     整數 (int) $priority = 0
): EvStat
公開 stop( int $how = ? ): void
公開 suspend(): void
final public timer(
     float $after,
     float $repeat,
     可呼叫的 (callable) $callback,
     混合型別 (mixed) $data = null (空值),
     整數 (int) $priority = 0
): EvTimer
公開 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 監視器將不受影響。將此值設為非 null 值不會在 libev 中引入任何額外開銷。另請參閱 » 控制事件循環的函式

深度

遞迴深度。請參閱 Ev::depth()

目錄

新增註記

使用者提供的註記

此頁面尚無使用者提供的註記。
To Top