原文:Fundamentals of concurrent programming
译者:youngsterxyf
本文是一篇并发编程方面的入门文章,以Go语言编写示例代码,内容涵盖:
- 运行期并发线程(goroutines)
- 基本的同步技术(管道和锁)
- Go语言中基本的并发模式
- 死锁和数据竞争
- 并行计算
在开始阅读本文之前,你应该知道如何编写简单的Go程序。如果你熟悉的是C/C++、Java或Python之类的语言,那么 Go语言之旅 能提供所有必要的背景知识。也许你还有兴趣读一读 为C++程序员准备的Go语言教程 或 为Java程序员准备的Go语言教程。
1. 运行期线程
Go允许使用go
语句开启一个新的运行期线程,即 goroutine,以一个不同的、新创建的goroutine来执行一个函数。同一个程序中的所有goroutine共享同一个地址空间。
Goroutine非常轻量,除了为之分配的栈空间,其所占用的内存空间微乎其微。并且其栈空间在开始时非常小,之后随着堆存储空间的按需分配或释放而变化。内部实现上,goroutine会在多个操作系统线程上多路复用。如果一个goroutine阻塞了一个操作系统线程 …