首页 > php框架 > Swoole > 正文

Swoole怎么用SwooleCoroutineWaitGroup等待所有协程执行完毕

尼克
发布: 2025-10-05 16:38:02
原创
413人浏览过
SwooleCoroutineWaitGroup用于协调多个协程执行完成,通过add()增加计数、done()减少计数、wait()阻塞等待计数归零,需确保add与done成对调用并在协程中使用try-finally保障done执行,避免死锁。

swoole怎么用swoole\coroutine\waitgroup等待所有协程执行完毕

在 Swoole 中,SwooleCoroutineWaitGroup 用于等待一组协程全部执行完成,类似于 Go 语言中的 sync.WaitGroup。它通过计数机制来协调多个协程的结束时机。

基本用法说明

SwooleCoroutineWaitGroup 的核心是三个方法:

  • add(int $delta = 1):增加计数器,通常在启动新协程前调用。
  • done():减少计数器,每个协程执行完后调用一次。
  • wait(float $timeout = null):阻塞当前协程,直到计数器归零,或超时。

使用示例

下面是一个简单的例子,启动多个协程并等待它们全部完成:

行者AI
行者AI

行者AI绘图创作,唤醒新的灵感,创造更多可能

行者AI100
查看详情 行者AI
use SwooleCoroutine;
use SwooleCoroutineWaitGroup;

Coroutine
un(function () {
    $wg = new WaitGroup();

    $numTasks = 5;

    for ($i = 0; $i < $numTasks; $i++) {
        $wg->add(); // 每启动一个协程,计数加一

        Coroutine::create(function () use ($wg, $i) {
            echo "协程 {$i} 开始执行
";
            Co::sleep(1); // 模拟异步任务
            echo "协程 {$i} 执行完成
";
            $wg->done(); // 任务完成,计数减一
        });
    }

    $wg->wait(); // 等待所有协程完成
    echo "所有协程已执行完毕
";
});
登录后复制

注意事项

使用 WaitGroup 时需要注意以下几点:

  • 必须保证 add()done() 成对调用,否则可能造成死锁。
  • 不能在 wait() 之后再调用 add(),否则会抛出错误。
  • 建议在协程内部使用 try-finally 确保 done() 总能被执行,防止异常导致计数不归零。

例如增强健壮性:

Coroutine::create(function () use ($wg, $i) {
    try {
        echo "协程 {$i} 开始处理
";
        Co::sleep(1);
        echo "协程 {$i} 完成
";
    } finally {
        $wg->done(); // 确保无论如何都会调用 done
    }
});
登录后复制
基本上就这些,合理使用 SwooleCoroutineWaitGroup 能有效控制并发协程的生命周期。

以上就是Swoole怎么用SwooleCoroutineWaitGroup等待所有协程执行完毕的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号