- Channel
- 使用示例:
- 使用示例:
Channel
Swoole-1.9.0新增了一个新的内存数据结构Channel,用于实现高性能的进程间通信,底层基于共享内存+Mutex互斥锁实现,可实现用户态的高性能内存队列。
Channel可用于多进程环境下,底层在读取写入时会自动加锁,应用层不需要担心数据同步问题- 必须在父进程内创建才可以在子进程内使用
Channel不受PHP的memory_limit控制
使用示例:
$chan = new Swoole\Channel(1024 * 256);$n = 100000;$bytes = 0;if (pcntl_fork() > 0){echo "Father\n";for ($i = 0; $i < $n; $i++){$data = str_repeat('A', rand(100, 200));if ($chan->push($data) === false){echo "channel full\n";usleep(1000);$i--;continue;}$bytes += strlen($data);// echo "#$i\tpush ".strlen($data)." bytes\n";}echo "total push bytes: $bytes\n";var_dump($chan->stats());}else{echo "Child\n";for ($i = 0; $i < $n; $i++){$data = $chan->pop();if ($data === false){echo "channel empty\n";usleep(1000);$i--;continue;}$bytes += strlen($data);// echo "#$i\tpop " . strlen($data) . " bytes\n";}echo "total pop bytes: $bytes\n";var_dump($chan->stats());}
