在https://golang.org/pkg/testing/中描述了我們可以使用testing.B.RunParallel()函數(shù)在并行設(shè)置中運(yùn)行基準(zhǔn)測(cè)試。我嘗試編寫簡(jiǎn)單的測(cè)試代碼:func BenchmarkFunctionSome(b *testing.B) { for i := 0; i < b.N; i++ { SomeFunction() }}然后我把它改成使用RunParallel()func BenchmarkFunctionSome(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { SomeFunction() } })}并且使用RunParallel()的比第一個(gè)基準(zhǔn)要慢。實(shí)際上,基準(zhǔn)測(cè)試中并行設(shè)置的含義是什么?如果我使用它為什么會(huì)變慢RunParallel()?
2 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
第一個(gè)基準(zhǔn)測(cè)試中的 for 循環(huán)讓所有測(cè)試按順序運(yùn)行,一次一個(gè),性能是時(shí)間除以迭代次數(shù)。
RunParallel 基準(zhǔn)在可用線程之間劃分迭代。性能的計(jì)算類似,可能是每個(gè)組的平均值。這一點(diǎn)是幾個(gè)(確切的 # 基于您的 GOMAXPROCS 設(shè)置)測(cè)試迭代同時(shí)運(yùn)行。這在測(cè)試具有共享資源和鎖定的功能時(shí)特別有用,這些功能可能單獨(dú)運(yùn)行良好,但在并發(fā)運(yùn)行時(shí)會(huì)引入性能問題。

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
這取決于里面有什么
SomeFunction()
如果它只是一個(gè)空函數(shù)或簡(jiǎn)單的計(jì)算,串行基準(zhǔn)測(cè)試會(huì)更快。但如果是繁重的計(jì)算或 IO,
RunParallel()
基準(zhǔn)會(huì)更快。
添加回答
舉報(bào)
0/150
提交
取消