Swoole 中使用 Atomic 实现进程间无锁计数器
使用示例:
$atomic = new SwooleAtomic();
$serv = new SwooleServer("127.0.0.1", "9501");
$serv->set([
"worker_num" => 1,
"log_file" => "/dev/null"
]);
// 主进程启动时触发,与管理进程并行启动
$serv->on("start", function ($serv) use ($atomic) {
if ($atomic->add() == 2) {
$serv->shutdown();
}
});
// 管理进程启动时触发,与主进程并行启动
$serv->on("ManagerStart", function ($serv) use ($atomic) {
if ($atomic->add() == 2) {
$serv->shutdown();
}
});
// 管理进程结束时触发,这时 Task 和 Worker 进程已结束运行,已被 Manager 进程回收
$serv->on("ManagerStop", function ($serv) {
echo "shutdown
";
});
$serv->on("Receive", function () {
});
$serv->start();
服务器启动成功后,
onStart/onManagerStart/onWorkerStart
会在不同的进程内并发执行。
onStart/onManagerStart/onWorkerStart
3 个事件的执行顺序是不确定的。