19、Go并发编程:内存模型、工作负载与上下文的深度解析

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()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值