2021-03-06:go中,公共变量是协程安全吗?赋值操做是原子的吗?为何?git
福哥答案2021-03-06:github
这是面试中被问到的。实力有限,真正的答案还不知道。个人想法是a=1是原子操做,a=b不是原子操做。实际开发中,不大多是a=1这种状况,能够说是协程不安全。面试
答案1:
不是协程安全的,
赋值非原子操做,
须要加锁要么就作原子操做,
不然会引发data race。安全
评论以下:
题016_
卓熊 7:39:15
Go不少操做并无作太多处理,仍是沿用了c。因此公共变量非协程安全,赋值操做是否原子跟变量类型及机器架构有关(指令集)。架构
直接来我家-勤心 10:54:22
正常上班并发
题000_leetcode讨论群
刷题菜鸡 9:50:47
Io密集型调大并发数不会提高过高性能负载均衡
刷题菜鸡 9:50:56
由于都在等…ide
陌兮 9:55:19
这时候公用buffer,适量减小线程切换才正确性能
成都-似杏而酢 14:49:42
暴力枚举咯线程
成都-似杏而酢 14:49:53
这才多少点多少边嘛
葡萄❤柠檬 16:06:34
适量调大是有用的
葡萄❤柠檬 16:06:47
为何io密集型,线程数是2倍呢?
你撤回了一条消息
葡萄❤柠檬 16:07:18
若是没用,那就应该是cpu核心数
葡萄❤柠檬 16:07:31
只是不能调得太大
成都-似杏而酢 16:21:55
SSD 的并发不挺好呢么
1711680493.github.io 16:28:09
今天的每日一题是我过的最快的一次
题078_
Tnze 10:27:04
公共变量不是协程安全的,赋值操做不是原子的
Tnze 10:27:45
这是因为线代多核cpu中变量可能会储存在不一样核心各自的cache上
Tnze 10:29:05
须要原子操做必定要用sync包
题029_
【新手】SQL双活负载均衡集群 7:48:53
2倍就是一个估计而已,2.5倍,1.8倍,甚至3倍,效果都同样
【资深】葡萄❤柠檬 8:02:30
因此有用啊
【资深】葡萄❤柠檬 8:02:43
go中默认只是cpu的核心数
【资深】葡萄❤柠檬 8:02:53也就是说,能够调大