要使用协程的API,必须在协程容器中,那么怎么样才算创建一个协程容器呢?最外层go闭包内,或者\Co\Run()闭包内,都算创建了协程序容器
<?php
go(function(){ //此处用\Co\Run效果一样的
//在当前闭包内,就算协程环境了,一般情况下,根协程cid = 1
for ($i=0;$i<10;$i++) {
go(function(){
//子协程环境
})
}
//此处必须等所有子协程环境执行完成
});
//当前位置不是协程环境, 代码运行到此处就结束了
切记!!! 在协程环境中,一定不要使用sleep,否则全局或者静态变量存在脏读,无论你是否用了协程上下文管理器隔离。
当前协程co::sleep()之后只会影响当前协程,不会影响协程调度切换时间和其他协程的运行时间
协程内有嵌套,父协程必须等待所有子协程运行完毕,才能退出