码迷,mamicode.com
首页 > 系统相关 > 详细

Swoole 中使用 Atomic 实现进程间无锁计数器

时间:2020-07-19 23:48:19      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:add   log   use   manage   进程启动   管理   示例   mic   tom   

使用示例:

$atomic = new Swoole\Atomic();

$serv = new Swoole\Server(‘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\n";
});

$serv->on("Receive", function () {

});

$serv->start();

服务器启动成功后,onStart/onManagerStart/onWorkerStart 会在不同的进程内并发执行。

onStart/onManagerStart/onWorkerStart 3 个事件的执行顺序是不确定的。

Swoole 中使用 Atomic 实现进程间无锁计数器

标签:add   log   use   manage   进程启动   管理   示例   mic   tom   

原文地址:https://www.cnblogs.com/danhuang/p/13341399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!