## `Mix\Coroutine\Channel` 通道是 CSP 模型的灵魂,也是 Golang 区别于 Python/Node.js 协程的重要基础,通过通道我们能非常灵活的处理各个协程的执行结果。 通道你可以理解为一个内存版本的队列,队列具有指定的长度,同样遵循先进先出原则,通过 `push` 入列,`pop` 方法出列。与队列不同的是,当队列满时 `push` 会将当前协程挂起,切换到其他协程去执行,反之当队列为空 `pop` 时同上。基于这个特性,我们就可以实现获取子协程的异步执行结果。 ~~~ $chan = new \Mix\Coroutine\Channel(2); xgo(function() use ($chan) { // 执行一些 IO 操作 $chan->push($result); }); xgo(function() use ($chan) { // 执行一些 IO 操作 $chan->push($result); }); $result1 = $chan->pop(); $result2 = $chan->pop(); ~~~ | 方法 | 描述 | | --- | --- | | push(mixed $data, float $timeout \= \-1): bool | 放入对象 | | pop(float $timeout \= \-1): mixed | 抛出对象 | | stats(): array | 获取通道的状态 | | isEmpty(): bool | 是否为空 | | isFull(): bool | 是否已满 | | length(): int | 返回长度 | | close(): bool | 关闭通道 |