為何在這個bench下golang開啟多核反而慢很多?

時間 2021-05-05 17:13:53

1樓:布丁

首先做這種運算實體並沒有並行但想看看並行效能的benchmark, 請使用 testing package 的 benchmark framework, 能避免很多類似下面的坑。

坑:go Proc0(NewG())

會比go func() ()

慢很多。因為

NewG() 是在 calling goroutine 裡執行的(spec明確說明了),你所有 goroutine 用的記憶體都是在同乙個 goroutine 裡分配。

Memory allocator 有 thread cache, 同乙個 goroutine 連續分配的小記憶體通常會分配到相鄰空間(尤其是程式剛啟動沒什麼碎片),這是基本的區域性性假設。

NewG() 分配的記憶體特別小,所以連續分配的話基本都在同乙個 4K 頁上,這個可以把NewG()的位址指標們的位址打出來驗證。

好啦,開始並行跑了,你的 4 個 CPU cores 就開始搶著要cache這片記憶體,然後頻繁寫,頻繁衝突失效,互相傷害,嚴重影響cache命中率,吞吐自然就沒法scale了。

如何在這個時代,活出魏晉名士的風範?

不能停不想動 先說明一下,我是非常崇尚魏晉風度的,但是想要活出魏晉名士風範,我理性地奉勸大家還是省省吧,想要擁有此中風範實在的不容易,我個人淺薄的理解至少需要具備三種條件,首先你要有顆赤子之心,其次你要有面對世人譏笑的勇氣,最重要的你要有優於常人的真才實學,三者相輔相承缺一不可。擁有了赤子之心,行為...

如何在這個浮躁的世界靜心學習?

花間一本書 最重要的是為什麼學習?內心浮躁的時候不適合 為學習而學習 或者,更武斷一些,這個時代大多數人都不適合。為乙個明確的任務而學習,哪怕只是為了考證,為了吸引喜歡的人,找個好工作 越具體越好。 無限光暗 先學習控制自己的思想,認清自己的長處和短處。反正挺難的,估計你是很難能夠靜下心學習。不用擔...

如何在這樣的正能量下抖機靈?

応振強 如果你想打造一篇滿分作文,別忙著比興入題 排比造勢 巧設懸念 虎頭豹尾。你該做的是,編個名言當題記。沃 茲基碩德 名聲,財富,力量,曾經得到過這個世界所有東西的男人,海賊王 哥爾 D 羅傑,他死前說過的話讓抱有夢想的男人奔向大海 我的財寶麼?想要可以全部給你,去找出來!我把這世界所有的東西都...