Coroutine\Channel->push
向通道中写入数据。
function Coroutine\Channel->push(mixed $data, float $timeout = -1) : bool;
参数
$data
可以是任意类型的PHP
变量,包括匿名函数和资源- 为避免产生歧义,请勿向通道中写入空数据,如
0
、false
、空字符串、null
$timeout
设置超时时间,在通道已满的情况下,push
会挂起当前协程,在约定的时间内,如果没有任何消费者消费数据,将发生超时,底层会恢复当前协程,push
调用立即返回false
,写入失败
$timeout
参数在4.2.12
或更高版本可用
返回值
- 执行成功返回
true
- 通道并关闭时,执行失败返回
false
,可使用$chan->errCode
得到错误码
channel
基于引用计数实现,是零拷贝的
通道已满
- 自动
yield
当前协程,其他消费者协程pop
消费数据后,通道可写,将重新resume
当前协程 - 多个生产者协程同时
push
时,底层自动进行排队,底层会按照顺序逐个resume
这些生产者协程
通道为空
- 自动唤醒其中一个消费者协程
- 多个消费者协程同时
pop
时,底层自动进行排队,按照顺序逐个resume
这些消费者协程