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也就是說,能夠調大