日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go benchmark 性能测试 单元测试 基准测试 使用方法详解

發布時間:2024/2/28 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go benchmark 性能测试 单元测试 基准测试 使用方法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡言

基準測試是測量一個程序在固定工作負載下的性能

在Golang中,基準測試函數以Benchmark為前綴并且帶有一個 *testing.B 類型的參數

規則

  • 基準測試的代碼文件必須以_test.go結尾
  • 基準測試的函數必須以Benchmark開頭
  • 基準測試函數必須接受一個指向Benchmark類型的指針作為唯一參數,即比如func BenchmarkMapkeys1(b *testing.B)
  • 基準測試函數不能有返回值
  • b.ResetTimer是重置計時器,這樣可以避免for循環之前的初始化代碼的干擾
  • 最后的for循環很重要,被測試的代碼要放到循環里
  • b.N是基準測試框架提供的,表示循環的次數,因為需要反復調用測試的代碼,才可以評估性能
  • 不要修改b.N,因為基準測試是很智能的,它會自動根據你要測試函數的運行時間動態調整該值
  • b.N 從 1 開始,如果基準測試函數在1秒內就完成 (默認值),則 b.N 增加,并再次運行基準測試函數。b.N 在近似這樣的序列中不斷增加;1, 2, 3, 5, 10, 20, 30, 50, 100,1000,20000?等等。 基準框架試圖變得聰明,如果它看到當b.N較小而且測試很快就完成的時候,它將讓序列增加地更快
  • 示例:(測試int轉string的SprIntf()函數的效率)

    package test import ("fmt""testing" ) func BenchmarkTest1(b *testing.B) {for i := 0; i < b.N; i++ {_ = fmt.Sprintf("%d", i)} }

    實驗結果如下圖(請注意紅框中的,比如文件名,函數名,測試命令):

    測試結果分析:

    1. BenchmarkTest1-4 表測試的函數名,-4 表示GOMAXPROCS(線程數)的值為4

    2. 10000000 表一共執行了一千萬次,即B.N的值

    3. 107 ns/op表平均每次操作花費了107納秒

    4. 16 B/op 表每次操作申請了16Byte的內存申請

    5. 2 allocs/op 表每次操作申請了2次內存

    參數介紹

    1. ?參數-bench,它指明要測試的函數;點字符意思是測試當前所有以Benchmark為前綴函數

    2. ?參數-benchmem,性能測試的時候顯示測試函數的內存分配大小,內存分配次數的統計信息

    3. 參數-count n,運行測試和性能多少此,默認一次

    PS:

    有些時候在benchmark之前需要做一些準備工作,并且,我們不希望這些準備工作納入到計時里面,我們可以使用 b.ResetTimer(),代表重置計時為0,以調用時的時刻作為重新計時的開始

    總結

    以上是生活随笔為你收集整理的go benchmark 性能测试 单元测试 基准测试 使用方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。