这里写问题描述
<?php
namespace crontab;
use Workerman\Crontab\Crontab;
class Test
{
public function onWorkerStart()
{
//CrontabA
new Crontab('*/1 * * * * *', function () {
echo date('Y-m-d H:i:s')."-1\n";
});
//CrontabB
new Crontab('0 */1 * * * *', function () {
echo date('Y-m-d H:i:s')."-5\n";
sleep(5);
});
}
}
不知道是不是我理解得有问题 手册上讲是阻塞的
按这个理解 应该是 CrontabA执行一次 CrontabB执行一次 阻塞5秒 然后执行CrontabA
输出应该是
XXXX-XX-XX XX:XX:00-1
XXXX-XX-XX XX:XX:00-5
XXXX-XX-XX XX:XX:05-1
XXXX-XX-XX XX:XX:06-1
XXXX-XX-XX XX:XX:07-1
XXXX-XX-XX XX:XX:08-1
....
但是我执行起来发现输出是
XXXX-XX-XX XX:XX:00-1
XXXX-XX-XX XX:XX:00-5
XXXX-XX-XX XX:XX:05-1 //
XXXX-XX-XX XX:XX:05-1 // 这几个是
XXXX-XX-XX XX:XX:05-1 // 一下输出
XXXX-XX-XX XX:XX:05-1 // 5次的
XXXX-XX-XX XX:XX:05-1 //
XXXX-XX-XX XX:XX:06-1
XXXX-XX-XX XX:XX:07-1
XXXX-XX-XX XX:XX:08-1
....
是我理解不对吗
是的,你理解不对
阻塞不等于阻止
这么说比较清楚
同一个时刻 只能执行一个逻辑
使用异步 IO 函数代替 sleep(),比如 Swoole 的
co::sleep()
。