* Fix #513

* Change code block to bold
This commit is contained in:
Lynn
2018-07-16 06:20:53 +08:00
committed by 无闻
parent e72890819f
commit a30c3bb4a0

View File

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