前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?

​2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?

原创
作者头像
福大大架构师每日一题
修改2021-03-08 09:56:21
1.3K0
修改2021-03-08 09:56:21
举报

2021-03-06:go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?

福哥答案2021-03-06:

这是面试中被问到的。实力有限,真正的答案还不知道。我的想法是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

因为都在等…

陌兮 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

也就是说,可以调大

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档