本文介紹golang 如何做基準效能測試。
編寫完**除了跑必要的單元測試外,還需要考慮**跑起來的效能如何。效能的衡量其實就是程式執行時候程序的記憶體分配,cpu消耗情況。
golang 語言在提供了功能測試的基礎上,提供了豐富的效能測試功能。
首先,從乙個例子來講起。 隨便寫乙個簡單的快速排序,然後和系統自帶的排序做乙個效能比較。
如下為簡版快排的**:
package benchmark
import "sort"
func qsort(data int)
func myqsort(data int, s, e int)
t := data[s]
i, j := s, e
for i < j
for ; i < j && data[i] < t; i++
if i < j
data[i], data[j] = data[j], data[i]
i++j--
} data[i] = t
myqsort(data, s, i-1)
myqsort(data, i+1, e)
}
然後編寫乙個測試的test。
package benchmark
import "testing"
import "math/rand"
import "time"
import "sort"
var ints int
// 長度為 1w 的資料使用系統自帶排序
func benchmarksort10k(t *testing.b)
}// 長度為 100 的資料使用系統自帶排序
func benchmarksort100(t *testing.b)
}// 長度為 1w 的資料使用上述**排序
func benchmarkqsort10k(t *testing.b)
}// 長度為 100 的資料使用上述**排序
func benchmarkqsort100(t *testing.b)
}// 資料初始化,為了保證每次資料都是一致的。
func testmain(m *testing.m)
m.run()
}
執行命令 :
# go test -cover -count 3 -benchmem -bench=.
執行結果如下圖:
基準測試,預設將每個方法執行1s中,然後展示執行的次數,每一次執行的耗時, 上述還展示了記憶體每次分配的大小,以及每次benchmark分配的次數。上述的命令列指定了執行次數為3次,顯示**覆蓋率和記憶體分配情況。
從基準測試的結果可以分析出:對於1w資料量的排序,自帶的排序比我的排序演算法要快20倍左右;100資料量的排序,手擼的排序略勝一籌。
從記憶體分析來講,系統自帶的會使用4b的資料,而我的演算法無記憶體分配。
引入golang 提供的testing
包,寫需要的基準測試的方法(方法名必須以benchmark開頭, 引數必須為 *testing.b)。
若需要做一些資料初始化的工作,可以如上寫乙個testmain 方法,將資料初始化的工作在這裡完成。
除了這些,可以看*testing.b, *testing.m 的相關方法即可。
最後,只要執行官方提供的go test -bench=.
命令,即可開始跑基準測試。 當然,還有其他選項可以滿足我們多樣的需求。
例如:其他引數可以通過go help testflag
檢視
我這裡選取的是第乙個數作為中位數,資料越大越可能出現傾斜,排序慢的概率也大。
正常的排序包中,都會在對小於等於12 個數的陣列做排序時使用希爾排序,速度也有很大提公升。
除了簡單的做效能測試外,golang 還自帶了效能分析的工具,我們可以快速找出**中的記憶體分配、cpu消耗的核心區,幫助我們解決服務的效能問題。下篇文章將做詳細了解。redis 基準測試,效能測試
命令 redis benchmark option option value 10000個處理速度 redis benchmark h 106.13.27.33 p 6379 a lykj n 10000 10000個處理set 和 lpush 的速度 redis benchmark h 106.1...
mysql基準效能 MYSQL的效能基準測試
mysql的效能基準測試 閱讀 150 下面跟著筆者一起來了解下mysql的效能基準測試,相信大家看完肯定會受益匪淺,文字在精不在多,希望mysql的效能基準測試這篇短內容是你想要的。一為什麼需要基準測試 唯一方便有效,可以學習系統在給定的工作負載下會發生什麼的方法。可以觀察系統在不同的壓力下的行為...
高效能計算基準測試程式(二) MPI測試基準
測試集 參考官方介紹,一般測試過程中使用imb測試mpi傳輸的各項效能並結合osu測試mpi頻寬及延時。osu bibw bidirectional bandwidth test osu bw bandwidth test osu latency latency test osu put laten...