golang 效能測試 1 基準效能測試

2022-05-18 19:45:10 字數 2114 閱讀 1819

本文介紹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...