<?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上跑打印出來(lái)的是有4毫秒的時(shí)間差,但是在centos上能精確到1毫秒,兩個(gè)環(huán)境都是安裝了event擴(kuò)展,請(qǐng)問(wèn)大佬們這是什么回事呢?系統(tǒng)的定時(shí)器精度問(wèn)題嗎?十分感謝;
有誤差正常的,cpu分片、進(jìn)程調(diào)度算法、系統(tǒng)負(fù)載、程序代碼都會(huì)影響。比如當(dāng)cpu忙于其它任務(wù)時(shí),來(lái)不及觸發(fā)定時(shí)器就很有可能造成定時(shí)器不準(zhǔn)。
很是奇怪,同段代碼試了macos、centos、ubuntu這三個(gè)系統(tǒng),Ubuntu的只能精確定時(shí)4毫秒,其他兩個(gè)系統(tǒng)可以精確定時(shí)1毫秒;而且如果把Ubuntu環(huán)境的event擴(kuò)展關(guān)掉,使用Select類的話,定時(shí)器就能精確定時(shí)1毫秒,也不知道是不是Ubuntu需要開(kāi)啟什么