Go에서는 테스트 패키지에 있는 BenchmarkXXX 함수를 사용하여 코드 성능을 측정하는 벤치마크 테스트를 쉽게 작성할 수 있습니다. 이러한 함수는 표준 구문을 따르며 벤치마크 실행을 제어하는 *testing.B 유형의 포인터를 인수로 받습니다. 벤치마크(go test -bench=BenchmarkName)를 실행하면 각 작업에 소요된 나노초 수, 초당 수행된 작업 수, 테스트에서 실행된 반복 횟수 및 초당 패스 수 메모리 양 등 다양한 벤치마크 결과를 비교함으로써 비효율적인 코드 영역을 식별하고 이를 통해 애플리케이션의 전반적인 성능을 향상시킬 수 있습니다.
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
是您要运行的基准测试函数的名称。
结果解读
基准测试结果将以表格的形式输出,其中包含各种信息,例如:
比较排序算法
运行上面的基准测试后,您会看到以下结果(结果可能会因您的硬件和系统配置而异):
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
은 실행하려는 벤치마크 기능의 이름입니다. 🎜🎜🎜결과 해석🎜🎜🎜벤치마크 결과는 다음과 같은 다양한 정보가 포함된 테이블 형식으로 출력됩니다. 🎜삽입 정렬
이 가장 느리고, 빠른 정렬
이 그 뒤를 따르고, sort.Ints
가 가장 빠릅니다. 🎜위 내용은 Go 언어의 벤치마크 및 성능 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!