From 677e10c6e969900ccbf67771a0fc384ece3b7bcc Mon Sep 17 00:00:00 2001 From: Xavier Zhao Date: Fri, 20 Mar 2020 20:53:47 +0800 Subject: [PATCH] =?UTF-8?q?14.2=20=E8=AF=AD=E6=B3=95=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E5=B0=86=E4=B8=BB=E8=AF=AD=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=BA=E5=8D=8F=E7=A8=8B=EF=BC=8C=E8=80=8C=E9=9D=9E=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=20(#763)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eBook/14.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eBook/14.2.md b/eBook/14.2.md index fae46b1..84a5799 100644 --- a/eBook/14.2.md +++ b/eBook/14.2.md @@ -508,7 +508,7 @@ func (c *container) Iter () <- chan item { for x := range container.Iter() { ... } ``` -其运行在自己启动的协程中,所以上边的迭代用到了一个通道和两个协程(可能运行在不同的线程上)。 这样我们就有了一个典型的生产者-消费者模式。如果程序在协程给通道写完值之前结束,则这个协程不会被垃圾回收;这是设计使然。这种看起来并不符合预期的行为正是由通道这种线程安全的通信方式所导致的。如此一来,一个协程为了写入一个永远无人读取的通道而被挂起就成了一个bug,而并非你预想中的那样被悄悄回收掉(garbage-collected)了。 +其运行在自己启动的协程中,所以上边的迭代用到了一个通道和两个协程(可能运行在不同的线程上)。 这样我们就有了一个典型的生产者-消费者模式。如果在程序结束之前,向通道写值的协程未完成工作,则这个协程不会被垃圾回收;这是设计使然。这种看起来并不符合预期的行为正是由通道这种线程安全的通信方式所导致的。如此一来,一个协程为了写入一个永远无人读取的通道而被挂起就成了一个bug,而并非你预想中的那样被悄悄回收掉(garbage-collected)了。 习惯用法:生产者消费者模式