成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個 Benchmark 比較分析工具

開發 開發工具
如果你的項目在 CI/CD 流程中有部署自動化測試,那不妨將該工具加入進來。在對函數有改動且加劇了性能損耗時,它或許能幫助你提前發現問題。

在 Go 中,通過撰寫 Benchmark 函數可以很方便地對某個功能點進行性能檢測。對于重要的函數,我們可以在 CI/CD 中添加相應的測試流程,當函數性能發生變化時能夠及時感知。那問題來了,如何檢測函數的性能變化?

換個說法,你編寫了某功能函數但發現它運行很慢,需要對該函數進行優化,當你在谷歌搜索找到更好的實現方式,通過 Benchmark 函數發現它的確變快了。但你說不清楚具體變快了多少,你想知道函數優化前后的性能對比,提高多少百分點,可信度高嗎?

針對以上的需求場景,有一個工具可以幫助到你,它就是 benchstat。

Benchmark 示例

我們先回顧一下基準測試。為了方便理解,這里以計算經典的計算斐波那契數列值為例。

func FibSolution(n int) int {
if n < 2 {
return n
}

return FibSolution(n-1) + FibSolution(n-2)
}

上述代碼是遞歸式實現,很明顯,當 n 越來越大時,該函數的運行會變得非常耗時。以 n 為 20 為例,Benchmark 函數如下

func BenchmarkFib20(b *testing.B) {
for i := 0; i < b.N; i++ {
FibSolution(20)
}
}

命令行執行go test -bench=BenchmarkFib20得到性能結果

BenchmarkFib20-8           39452             30229 ns/op

其中,-8 代表的是 8 cpu,函數運行次數為 39452,每次函數的平均花費時間為 30229ns。如果我們想得到多次樣本數據,可以指定 go test 的 -count=N 參數。例如想得到 5 次樣本數據,則執行go test -bench=BenchmarkFib20 -count=5

BenchmarkFib20-8           39325             30297 ns/op
BenchmarkFib20-8 39216 30349 ns/op
BenchmarkFib20-8 39901 30251 ns/op
BenchmarkFib20-8 39336 30455 ns/op
BenchmarkFib20-8 39423 30894 ns/op

計算斐波那契數列值的迭代式實現如下:

func FibSolution(n int) int {
if n < 2 {
return n
}
p, q, r := 0, 0, 1
for i := 2; i <= n; i++ {
p = q
q = r
r = p + q
}
return r
}

對比這兩種函數的性能差異,最樸素的方式就是分別對這兩個函數進行基準測試,然后通過手工分析這些基準測試結果,但是這并不直觀。

benchstat

benchstat 是 Go 官方推薦的一款命令行工具,它用于計算和比較基準測試的相關統計數據。

我們可以通過以下命令進行安裝

go install golang.org/x/perf/cmd/benchstat@latest

執行 -h 參數可以看到該工具的使用描述

~ $ benchstat -h
usage: benchstat [options] old.txt [new.txt] [more.txt ...]
options:
-alpha α
consider change significant if p < α (default 0.05)
-csv
print results in CSV form
-delta-test test
significance test to apply to delta: utest, ttest, or none (default "utest")
-geomean
print the geometric mean of each file
-html
print results as an HTML table
-norange
suppress range columns (CSV only)
-sort order
sort by order: [-]delta, [-]name, none (default "none")
-split labels
split benchmarks by labels (default "pkg,goos,goarch")

我們想比較 FibSolution(n) 從 15 到 20,兩種實現方式的性能基準測試。

$ go test -bench=. -count=5 | tee old.txt
$ go test -bench=. -count=5 | tee new.txt

注意,這兩條命令執行時,分別對應 FibSolution 函數采用遞歸式和迭代式實現邏輯。

此時,我們可以對這兩個函數實現邏輯進行性能對比

 $ benchstat old.txt new.txt 
name old time/op new time/op delta
Fib15-8 2.67μs ± 2% 0.01μs ± 5% -99.81% (p=0.008 n=5+5)
Fib16-8 4.20μs ± 1% 0.01μs ± 2% -99.87% (p=0.008 n=5+5)
Fib17-8 6.81μs ± 0% 0.01μs ± 2% -99.92% (p=0.008 n=5+5)
Fib18-8 11.1μs ± 1% 0.0μs ± 1% -99.95% (p=0.008 n=5+5)
Fib19-8 18.0μs ± 2% 0.0μs ± 4% -99.97% (p=0.008 n=5+5)
Fib20-8 29.2μs ± 1% 0.0μs ± 3% -99.98% (p=0.008 n=5+5)

可以看到,遞歸式實現的函數,他的執行時間隨著 n 值變大增加非常明顯。迭代式實現方式,相較于遞歸式,它的平均時間開銷降低了 99 % 以上,優化效果非常明顯。

另外,p=0.008 表示結果的可信程度,p 值越大表明可信度越低。一般以 0.05 作為臨界值,超過該值,則結果不可信。n=5+5 表示分別使用的有效樣本數量。

總結

benchstat 是一個基準測試統計工具,當我們做一些優化工作時,可以利用它減輕人工分析數據成本。

如果你的項目在 CI/CD 流程中有部署自動化測試,那不妨將該工具加入進來。在對函數有改動且加劇了性能損耗時,它或許能幫助你提前發現問題。

責任編輯:武曉燕 來源: Golang技術分享
相關推薦

2022-05-16 14:25:31

數據分析預測分析工具

2021-03-06 07:00:00

awk文本分析工具Linux

2024-01-08 13:47:00

代碼分析工具

2025-04-09 03:00:00

2010-09-16 15:57:00

PPPoA配置

2022-06-09 08:23:33

預測分析工具人工智能

2010-04-01 14:05:41

云計算

2016-12-26 09:49:39

httpstatcurl分析工具

2014-03-20 10:19:36

Shell工具jsondiff.sh

2020-01-20 14:40:39

工具代碼開發

2010-11-09 15:30:01

Sql server時

2021-10-08 19:00:28

NMState網絡配置工具系統運維

2012-07-17 17:05:55

JavaScript

2022-12-28 12:29:45

duf命令

2017-07-25 14:20:13

戴爾配置功耗

2023-12-11 08:16:51

工具命令行參數

2020-11-04 07:56:19

工具Linux 翻譯

2014-08-27 10:20:10

項目項目分析

2022-08-02 07:57:54

RAC故障運維

2020-04-11 22:07:29

存儲分析工具人工智能存儲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 激情毛片 | 免费成人高清在线视频 | 国产精品亚洲精品日韩已方 | 在线播放亚洲 | 午夜精品久久久久久久星辰影院 | av在线免费网 | 在线一区二区三区 | 久久久久久a | 亚洲午夜小视频 | 91精品在线观看入口 | 中文字幕 在线观看 | 色婷婷狠狠 | 成人国产精品久久久 | 精品久久久久一区 | 一区二区三区免费 | 毛片一区二区三区 | 九九久久精品视频 | 欧美天堂 | 国产一区二区三区免费视频 | 国产 日韩 欧美 在线 | 精品网 | 超碰导航| 久久久久国产一区二区三区四区 | 国产一区二区a | 午夜一区二区三区在线观看 | 久久精品中文字幕 | 亚洲精品综合一区二区 | 国产成人精品午夜视频免费 | 91精品国产一区 | 欧美二区乱c黑人 | 人人九九精| 精品欧美黑人一区二区三区 | 精品欧美一区二区三区免费观看 | 久草免费在线视频 | 中文字幕中文字幕 | 97精品超碰一区二区三区 | 日韩在线观看中文字幕 | 免费成人高清在线视频 | 国产精品中文字幕一区二区三区 | 久久久久国产一级毛片高清网站 | 免费一二区|