2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?
福哥答案2021-03-06:
这是面试中被问到的。实力有限,真正的答案还不知道。我的想法是a=1是原子操作,a=b不是原子操作。实际开发中,不大可能是a=1这种情况,可以说是协程不安全。
不是协程安全的, 赋值非原子操作, 需要加锁要么就做原子操作, 否则会引起data race。
评论如下: 题016_ 卓熊 7:39:15 Go很多操作并没有做太多处理,还是沿用了c。所以公共变量非协程安全,赋值操作是否原子跟变量类型及机器架构有关(指令集)。
直接来我家-勤心 10:54:22 正常上班
题000_leetcode讨论群 刷题菜鸡 9:50:47 Io密集型调大并发数不会提升太高性能
刷题菜鸡 9:50:56 因为都在等…
陌兮 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 也就是说,可以调大