Atomic
Atomic
是Swoole
底层提供的原子计数操作类,可以方便整数的无锁原子增减。
- 使用共享内存,可以在不同的进程之间操作计数
- 基于
gcc/clang
提供的CPU
原子指令,无需加锁 - 在服务器程序中必须在
Server->start
前创建才能在Worker
进程中使用 - 默认使用
32
位无符号类型,如需要64
有符号整型,可使用Swoole\Atomic\Long
注意:请勿在onReceive
等回调函数中创建原子数,否则底层的GlobalMemory
内存会持续增长,造成内存泄漏。
Atomic
在1.7.19
以上版本可用
Atomic\Long
在1.9.20
以上版本可用
64位长整型
1.9.20
版本增加了对64位有符号长整型原子计数的支持。使用new Swoole\Atomic\Long
来创建。
Atomic\Long
不支持wait
和wakeup
方法
使用示例
$atomic = new Swoole\Atomic(123);
echo $atomic->add(12)."\n";
echo $atomic->sub(11)."\n";
echo $atomic->cmpset(122, 999)."\n";
echo $atomic->cmpset(124, 999)."\n";
echo $atomic->get()."\n";