第八章 Goroutines和Channels

并发程序指的是同时做好几件事情的程序,随着硬件的发展,并发程序显得越来越重要。Web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户动画的同时,还会后台执行各种计算任务和网络请求。即使是传统的批处理问题--读取数据,计算,写输出--现在也会用并发来隐藏掉I/O的操作延迟充分利用现代计算机设备的多核,尽管计算机的性能每年都在增长,但并不是线性。

Go语言中的并发程序可以用两种手段来实现。这一章会讲解goroutine和channel,其支持“顺序进程通信”(communicating sequential processes)或被简称为CSP。CSP是一个现代的并发编程模型,在这种编程模型中值会在不同的运行实例(goroutine)中传递,尽管大多数情况下被限制在单一实例中。第9章会覆盖到更为传统的并发模型:多线程共享内存,如果你在其它的主流语言中写过并发程序的话可能会更熟悉一些。第9章同时会讲一些本章不会深入的并发程序带来的重要风险和陷阱。

尽管Go对并发的支持是众多强力特性之一,但大多数情况下跟踪并发程序还是很困难,并且在线性程序中我们的直觉往往还会让我们误入歧途。如果这是你第一次接触并发,那么我推荐你稍微多花一些时间来思考这两个章节中的样例。