国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

定時器類 Timer 的疑惑,求大神解答

小陽光

為什么定時器類 Timer 里面有一些 pcntl_alarm的函數,我不明白為什么要用這些函數,workerman的定時器我看并不依賴于pcntl_alarm,是用libevent擴展或者event擴展 或者超時來實現的毫秒級的定時器。

public static function signalHandle()
{
    if (!self::$_event) {
        \pcntl_alarm(1);
        self::tick();
    }
}

意思是沒任何event那么就用 pcntl_alarm 來實現mi秒級定時器嗎?

3997 1 2
1個回答

walkor 打賞

主進程和子進程定時器區(qū)別:
主進程使用的是pcntl_alarm做定時。子進程使用event擴展/libevent擴展或者stream_select的超時機制做定時。
主進程是秒級定時器,子進程是毫秒級定時器。
因為主進程不處理業(yè)務,秒級定時器對于主進程來說已經可以滿足需要。

原因
至于為什么主進程單獨使用pcntl_alarm做定時,主要是因為主進程如果使用event擴展/libevent擴展做定時后,
子進程會繼承主進程已經初始化帶有定時的event/libevent實例,導致子進程發(fā)生不可預知的定時邏輯。
另外子進程和主進程共享一個event/libevent實例,當子進程由于退出等操作銷毀event/libevent實例時,對主進程也有可能產生不可預知的影響。

年代過于久遠,無法發(fā)表回答
??