10.4.2 可缓冲通道
这小节的主题是可缓冲通道。这些通道允许 Go 调度器快速把任务放入队列,为了能够处理更多的请求。而且,您可以使用缓冲通道作为 信号量 来限制整个应用程序。
这里介绍的技术工作如下: 所有进入的请求被转发到通道里,由它来逐个处理。当通道处理完一个请求后,它就发送消息给原来当调用者说它准备处理新当请求了。因此这个通道的缓冲能力限制它能保存的并发请求数。
这个技术用 bufChannel.go
中的代码来帮助介绍,分为四个部分。
bufChannel.go
的第一部分代码如下:
bufChannel.go
的第二部分代码如下:
这个 numbers
通道的定义给它提供了存储五个整数的空间。
bufChannel.go
的第三部分代码显示如下:
上面这段代码里,我们试图放 10 个整数到 numbers
通道。然而,由于 numbers
通道只有 5 个整数的空间,您就不能把 10 个整数都存入进去。
bufChannel.go
的其余代码如下:
上面的代码里,我们试着使用 for
循环和 select
表达式读取 numbers
通道中的内容。只要 numbers
通道里有内容可读,select
表达式的第一个分支就会执行。如果 numbers
通道是空的,这个 default
分支就会执行。
执行 bufChannel.go
产生如下输出:
Last updated