通道 Coroutine\Channel 使用本地記憶體,不同的進程之間記憶體是隔離的。 只能在同一進程的不同協程內進行 push 和 pop 操作。 Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]); Co\run(function(){ // 設置一個容量為1的通道 ...
通道
Coroutine\Channel
使用本地記憶體,不同的進程之間記憶體是隔離的。
只能在同一進程的不同協程內進行 push
和 pop
操作。
Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
Co\run(function(){
// 設置一個容量為1的通道
$chan = new Swoole\Coroutine\Channel(1);
Swoole\Coroutine::create(function () use ($chan) {
for($i = 0; $i < 100000; $i++) {
co::sleep(1.0);
// 向通道中寫入數據,通道已滿時會排隊等候
$chan->push(['rand' => rand(1000, 9999), 'index' => $i]);
echo "$i pushed! \n";
}
});
Swoole\Coroutine::create(function () use ($chan) {
while(1) {
$data = $chan->pop();
var_dump($data);
}
});
});