Go 言語でのベンチマークとパフォーマンスの比較
Go では、テスト パッケージの BenchmarkXXX 関数を使用して、コードのパフォーマンスを測定するベンチマーク テストを簡単に作成できます。これらの関数は標準構文に従い、ベンチマークの実行を制御する *testing.B 型のポインターを引数として受け取ります。ベンチマークを実行すると (go test -bench=BenchmarkName)、結果の表を出力できます。この表には、各操作に費やされたナノ秒数、1 秒あたりに実行された操作の数、テストで実行された反復数、および1 秒あたりのパス数、メモリ量など。さまざまなベンチマークの結果を比較することで、非効率なコード領域を特定し、アプリケーションの全体的なパフォーマンスを向上させることができます。
Go 言語のベンチマークとパフォーマンスの比較
はじめに
ベンチマークは、コードのパフォーマンスを測定するための重要なツールです。これは非効率なコード領域を特定するのに役立ち、それによってアプリケーションの全体的なパフォーマンスが向上します。 Go 言語には、Go でのベンチマーク テストの作成を非常に簡単にする組み込みの testing
パッケージが用意されています。 testing
包,使得在 Go 中编写基准测试变得非常容易。
语法
基准测试函数的语法如下:
func BenchmarkName(b *testing.B)
其中:
b
是一个*testing.B
类型的指针,它包含了一些用于基准测试的附加功能。
实战案例
让我们编写一个基准测试来比较两种不同的排序算法的性能:
package main import ( "testing" "bytes" "sort" ) // 插入排序 func insertionSort(nums []int) { for i := 1; i < len(nums); i++ { key := nums[i] j := i - 1 for j >= 0 && nums[j] > key { nums[j+1] = nums[j] j-- } nums[j+1] = key } } // 快速排序 func quickSort(nums []int) { if len(nums) <= 1 { return } pivot := nums[len(nums)/2] var left, right []int for _, num := range nums { if num < pivot { left = append(left, num) } else if num > pivot { right = append(right, num) } } quickSort(left) quickSort(right) copy(nums, append(left, append([]int{pivot}, right...)...)) } // 基准测试 func BenchmarkInsertionSort(b *testing.B) { var buf bytes.Buffer for i := 0; i < b.N; i++ { nums := []int{5, 2, 8, 3, 1, 9, 4, 7, 6} insertionSort(nums) buf.WriteString(bytes.Join(nums, " ")) } } func BenchmarkQuickSort(b *testing.B) { var buf bytes.Buffer for i := 0; i < b.N; i++ { nums := []int{5, 2, 8, 3, 1, 9, 4, 7, 6} quickSort(nums) buf.WriteString(bytes.Join(nums, " ")) } } func BenchmarkGoSort(b *testing.B) { var buf bytes.Buffer for i := 0; i < b.N; i++ { nums := []int{5, 2, 8, 3, 1, 9, 4, 7, 6} sort.Ints(nums) buf.WriteString(bytes.Join(nums, " ")) } }
运行基准测试
要运行基准测试,请运行以下命令:
go test -bench=BenchmarkName
其中 BenchmarkName
是您要运行的基准测试函数的名称。
结果解读
基准测试结果将以表格的形式输出,其中包含各种信息,例如:
- ns/op:每个操作所花费的纳秒数。
- op/s:每秒执行的操作数。
- B:测试中运行的迭代次数。
- MB/s:每秒传递的内存量。
比较排序算法
运行上面的基准测试后,您会看到以下结果(结果可能会因您的硬件和系统配置而异):
BenchmarkInsertionSort 20332432 62.5 ns/op 16 B/op 5.75 MB/s BenchmarkQuickSort 11440808 104 ns/op 24 B/op 1.64 MB/s BenchmarkGoSort 21864500 57.7 ns/op 32 B/op 4.77 MB/s
从这些结果中,我们可以看到 插入排序
是最慢的,其次是 快速排序
,最快的则是 sort.Ints
-
b
は、型*testing.B には、ベンチマーク用の追加機能がいくつか含まれています。
BenchmarkName
は、実行するベンチマーク関数の名前です。 🎜🎜🎜結果の解釈🎜🎜🎜ベンチマーク結果は、次のようなさまざまな情報を含むテーブルの形式で出力されます。 🎜- ns/op: 各操作に費やされたナノ秒数。
- op/s: 1 秒あたりに実行される操作の数。
- B: テストで実行される反復の数。
- MB/s: 1 秒あたりに転送されるメモリの量。
Insertion Sort
が最も遅く、次に Quick Sort
が続き、最も速いのは sort.Ints
であることがわかります。 🎜以上がGo 言語でのベンチマークとパフォーマンスの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...
