Workerman定时器精度问题

slowbro
<?php
use Workerman\Lib\Timer;
use Workerman\Worker;

require_once "./vendor/autoload.php";

$worker = new Worker();
$worker->onWorkerStart = function($worker){
    Timer::add(0.001,function() use ($worker){
        echo microtime(true).PHP_EOL;
    });
};
Worker::runAll();

这段代码在ubuntu上跑打印出来的是有4毫秒的时间差,但是在centos上能精确到1毫秒,两个环境都是安装了event扩展,请问大佬们这是什么回事呢?系统的定时器精度问题吗?十分感谢;

1975 1 0
1个回答

walkor 打赏

有误差正常的,cpu分片、进程调度算法、系统负载、程序代码都会影响。比如当cpu忙于其它任务时,来不及触发定时器就很有可能造成定时器不准。

  • slowbro 2020-10-30

    很是奇怪,同段代码试了macos、centos、ubuntu这三个系统,Ubuntu的只能精确定时4毫秒,其他两个系统可以精确定时1毫秒;而且如果把Ubuntu环境的event扩展关掉,使用Select类的话,定时器就能精确定时1毫秒,也不知道是不是Ubuntu需要开启什么

年代过于久远,无法发表回答
×
🔝