2

clipboard.png

(补充:29行后面应该加上$chan->push('123');)
以上代码,一个协程在不停地拉取通道的消息(通道被关闭后停止),另一个协程是协程等待4秒后关闭通道,再另一个协程往通道里面塞数据(1秒后就不塞)。我预期的结果是,4秒后关闭通道,并且结束整个程序。但实际并不是。

clipboard.png

co::sleep(4) 前后打印时间显示,整整相差了6秒,这里我就很不理解了。我知道协程的原理是在IO等待的时候,根据优先权执行其他协程的逻辑处理,因此这里执行应该是一开始就拉取通道,开始4秒的等待,并且往通道塞数据,1秒后停止往通道添加数据(这里显示2秒后才结束也表示奇怪),然后应该只有拉取通道的协程在pop处IO挂起,4秒sleep的那个协程应该一只在sleep,那么2~3秒后应该打印出check point 2才对。

也在学习swoole中,也是刚接触线程、协程变成的概念,理论上能理解,但实际操作就一脸懵逼了,求指导。

2019-08-27 提问

查看全部 2 个回答

0

没有看到你push的操作。。

推广链接