Go 语言初级教程之八[并发]

并发
Go的作者选择了消息传递模型来作为推荐的并发编程方法。该语言同样支持共享内存,然后作者自有道理:
 

  1. 不要通过共享内存来通信,相反,通过通信来共享内存。


该语言提供了两个基本的构件来支持这一范型:goroutines和channels。

Go例程
Goroutine是轻量级的并行程序执行路径,与线程,coroutine或者进程类似。然而,它们彼此相当不同,因此Go作者决定给它一个新的名字并 放弃其它术语可能隐含的意义。
创建一个goroutine来运行名为DoThis的函数十分简单:
 

  1. go DoThis() // but do not wait for it to complete


匿名的函数可以这样使用:
 

  1. go func() {
     
  2.   for { /* do something forever */ }
     
  3. }() // Note that the function must be invoked


这些goroutine将会通过Go运行时而映射到适当的操作系统原语(比如,POSIX线程)。

通道类型
有了goroutine,代码的并行执行就容易了。然而,它们之间仍然需要通讯机制。Channel提供一个FIFO通信队列刚好能达到这一目的。
以下是使用channel的语法:
 

  1. /* Creating a channel uses make(), not new - it was also used for map creation */
     
  2. ch := make(chan int)
     
  3. /* Sending a value blocks until the value is read */
     
  4. ch <- 4
     
  5. /* Reading a value blocks until a value is available */
     
  6. i := <-ch


举例来说,如果我们想要进行长时间运行的数值计算,我们可以这样做:
 

阅读全文>>

你可能感兴趣的:(Go 语言初级教程之八[并发])