在最新版本的 Swoole Library
中底层提供了一个更便捷的协程并发管理工具:Coroutine\Barrier
协程屏障,或者叫协程栅栏。基于 PHP
引用计数和 Coroutine API
实现。相比于Coroutine\WaitGroup
,Coroutine\Barrier
使用更简单一些,只需经过参数传递或者闭包的use
语法,引入子协程函数上便可。php
use Swoole\Coroutine\Barrier; Co\run(function () { $barrier = Barrier::make(); $count = 0; $N = 4; foreach (range(1, $N) as $i) { \Swoole\Coroutine::create(function () use ($barrier, &$count) { System::sleep(0.5); $count++; }); } Barrier::wait($barrier); assert($count == $N); });
Barrier::make()
建立了一个新的协程屏障use
语法传递屏障,增长引用计数Barrier::wait($barrier)
,这时会自动挂起当前协程,等待引用该协程屏障的子协程退出Barrier::wait($barrier)
函数中返回Coroutine\Barrier
是一个比 WaitGroup
和 Channel
更易用的并发控制器,大幅提高了 PHP
并发编程的用户体验。编程