1. 程式人生 > 實用技巧 >Swoole 中使用 Atomic 實現程序間無鎖計數器

Swoole 中使用 Atomic 實現程序間無鎖計數器

使用示例:

$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 個事件的執行順序是不確定的。