Swoole 中使用 Atomic 實現程序間無鎖計數器
阿新 • • 發佈:2020-07-19
使用示例:
$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 個事件的執行順序是不確定的。