ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# create ~~~ int|false Warriorman\Coroutine::create(callable $function, ...$args) ~~~ ## 别名 ~~~ int|false void work(callable $function, ...$args) ~~~ ## 说明: 创建一个新的协程,并立即执行。协程执行的代码,必须为`callable` ,暂时协程没有数量上限 ### 参数 **`callable $function`** * **功能**:协程执行的代码,必须为`callable` **`...$args`** * **功能**:callable的参数值 ### 返回值 * 创建失败返回`false` * 创建成功返回协程的`ID` ## 执行顺序 在一个协程中使用 work嵌套创建新的协程。因为 WarriorMan的协程是单进程单线程模型,因此: * 使用`work`创建的子协程会优先执行,子协程执行完毕或挂起时,将重新回到父协程向下执行代码 * 如果子协程挂起后,父协程退出,不影响子协程的执行 ~~~ use Warriorman\Coroutine; work(function() { work(function () { Coroutine::sleep(3.0); work(function () { Coroutine::sleep(2.0); echo "co[3] end\n"; }); echo "co[2] end\n"; }); Coroutine::sleep(1.0); echo "co[1] end\n"; }); Coroutine::wait(); ~~~ ## 协程开销 每个协程包括C栈和PHP栈,C栈申请`2M`内存,PHP栈默认会分配`8K`的`stack`来存储协程的变量,`zval`的尺寸为`16字节`,因此`8K`的`stack`最大可以保存`512`个变量。协程栈内存占用超过`8K`后`ZendVM`会自动扩容。 协程退出时会释放申请的`stack`内存。