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的语法:
 post

  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


举例来讲,若是咱们想要进行长时间运行的数值计算,咱们能够这样作:
 操作系统

阅读全文>>线程

相关文章
相关标签/搜索