美文网首页
关于Coroutine\Channel的几点注意

关于Coroutine\Channel的几点注意

作者: 枫叶鱼水 | 来源:发表于2019-08-12 15:49 被阅读0次

通道,类似于go语言的chan,支持多生产者协程和多消费者协程。底层自动实现了协程的切换和调度。

实现原理

通道与PHP的Array类似,仅占用内存,没有其他额外的资源申请,所有操作均为内存操作,无IO消耗

底层使用PHP引用计数实现,无内存拷贝。即使是传递巨大字符串或数组也不会产生额外性能消耗

Channel->push :当队列中有其他协程正在等待pop数据时,自动按顺序唤醒一个消费者协程,当前生产者协程自动挂起,切换到消费者pop协程执行,执行完毕后切换回push生产者携程继续执行。当队列已满(push次数(且未pop消费)达到通道的容量,Chnnel->$capacity)时自动yield让出控制器,此时无法再继续向通道写数据(除非有数据消费),等待其他协程消费数据

Channel->pop:当队列为空时自动yield挂起,等待其他协程生产数据。消费数据后,队列可写入新的数据,自动按顺序唤醒一个生产者协程。

Coroutine\Channel使用本地内存,不同的进程之间内存是隔离的。只能在同一进程的不同协程内进行push和pop操作

相关文章

网友评论

      本文标题:关于Coroutine\Channel的几点注意

      本文链接:https://www.haomeiwen.com/subject/fnrujctx.html