Go并发编程:内存模型、工作负载与上下文的深度解析
1. Go内存模型
Go语言中,为避免因对语言核心规范理解不足而导致意外的数据竞争,需要了解Go内存模型。Go内存模型(https://golang.org/ref/mem)定义了在一个goroutine中读取变量的操作能够保证在另一个goroutine中对同一变量的写入操作之后发生的条件,为开发者避免数据竞争和确保确定性输出提供了保障。
1.1 单一goroutine情况
在单一goroutine内,不会出现非同步访问的情况,程序执行顺序保证了操作的先后顺序。
1.2 多goroutine情况
在多goroutine中,需要记住以下几个保证(用 A < B 表示事件A发生在事件B之前):
- 创建goroutine :创建goroutine的操作发生在该goroutine开始执行之前。例如:
i := 0
go func() {
i++
}()
这里先读取变量 i ,然后创建一个新的goroutine对 i 进行写入操作,不会导致数据竞争。
- goroutine退出 :goroutine的退出操作不保证在任何其他事件之前发生。例如:
i := 0
go func()
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



