🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Coroutine\\Channel->push [TOC] 向通道中写入数据。 ~~~ 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`这些消费者协程