这小节的主题是可缓冲通道。这些通道允许 Go 调度器快速把任务放入队列,为了能够处理更多的请求。而且,您可以使用缓冲通道作为 信号量 来限制整个应用程序。

这里介绍的技术工作如下: 所有进入的请求被转发到通道里,由它来逐个处理。当通道处理完一个请求后,它就发送消息给原来当调用者说它准备处理新当请求了。因此这个通道的缓冲能力限制它能保存的并发请求数。

这个技术用 bufChannel.go 中的代码来帮助介绍,分为四个部分。

这个 numbers 通道的定义给它提供了存储五个整数的空间。

bufChannel.go 的其余代码如下:

上面的代码里,我们试着使用 for 循环和 select 表达式读取 numbers 通道中的内容。只要 numbers 通道里有内容可读,select 表达式的第一个分支就会执行。如果 numbers 通道是空的,这个 default 分支就会执行。