diff --git a/eBook/14.2.md b/eBook/14.2.md index a9821e3..01ff6fe 100644 --- a/eBook/14.2.md +++ b/eBook/14.2.md @@ -4,7 +4,7 @@ 在第一个例子中,协程是独立执行的,他们之间没有通信。他们必须通信才会变得更有用:彼此之间发送和接收信息并且协调/同步他们的工作。协程可以使用共享变量来通信,但是很不提倡这样做,因为这种方式给所有的共享内存的多线程都带来了困难。 -而Go有一个特殊的类型,`通道(channel)`,像是通道(管道),可以通过它们发送类型化的数据在协程之间通信,可以避开所有内存共享导致的坑;通道的通信方式保证了同步性。数据通过通道:同一时间只有一个协程可以访问数据:所以不会出现数据竞争,设计如此。数据的归属(可以读写数据的能力)被传递。 +而 Go 有一种特殊的类型,*通道(channel)*,就像一个可以用于发送类型化数据的管道,由其负责协程之间的通信,从而避开所有由共享内存导致的陷阱;这种通过通道进行通信的方式保证了同步性。数据在通道中进行传递:*在任何给定时间,一个数据被设计为只有一个协程可以对其访问,所以不会发生数据竞争。* 数据的所有权(可以读写数据的能力)也因此被传递。 工厂的传送带是个很有用的例子。一个机器(生产者协程)在传送带上放置物品,另外一个机器(消费者协程)拿到物品并打包。 @@ -69,7 +69,7 @@ func main() { ch := make(chan string) go sendData(ch) - go getData(ch) + go getData(ch) time.Sleep(1e9) }