2021-03-06:go中,公共變量是協程安全嗎?賦值操做是原子的嗎?爲何?

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

相關文章
相關標籤/搜索