Go微服务实战
上QQ阅读APP看书,第一时间看更新

第5章 并发编程

在CPU发展的早期,其主要目标是提升处理器的处理频率。在提升频率遇到瓶颈后,CPU的发展进入多核时代。与之相对应,编程语言也开始向并行化的模式发展,Go语言就是在这种背景下发展起来的。可以说Go语言的并发是基于并行的。并行是指同时运行多个线程,而并发是把一个任务拆分成多个小块去执行(可能是轮番调度同一个处理器),不过只有在当前系统线程阻塞的情况下才会分配给其他核的线程。

主流的并行编程模式有多种,最著名的应属多线程。多线程的并发可以自然地对应到多核处理器,而且主流的操作系统也都提供了系统级的多线程支持。Go语言的多线程是基于消息传递的。Go语言将基于CSP(Communicating Sequential Process)模型的并发编程内置到了语言中,其特点就是goroutine(协程)之间是共享内存的。

Go语言最引人注目的就是其高性能的并发编程,它是通过goroutine和channel(通道)实现的。goroutine是Go语言程序中可独立执行的单元,而channel的作用则是在goroutine间传递消息。