gpt4 book ai didi

golang 全局变量访问在基准测试中很慢

转载 作者:数据小太阳 更新时间:2023-10-29 03:46:05 27 4
gpt4 key购买 nike

这是一个简单的 golang 基准测试,它以三种不同的方式运行 x++:

  1. 在一个简单的 for 循环中,在函数内部声明了 x
  2. 在函数内部声明了 x 的嵌套循环中
  3. 在 x 声明为全局变量的嵌套循环中
package main

import (
"testing"
)

var x = 0

func BenchmarkLoop(b *testing.B) {
x := 0
for n := 0; n < b.N; n++ {
x++
}
}

func BenchmarkDoubleLoop(b *testing.B) {
x := 0
for n := 0; n < b.N/1000; n++ {
for m := 0; m < 1000; m++ {
x++
}
}
}

func BenchmarkDoubleLoopGlobalVariable(b *testing.B) {
for n := 0; n < b.N/1000; n++ {
for m := 0; m < 1000; m++ {
x++
}
}
}

结果如下:

$ go test -bench=.

BenchmarkLoop-8 2000000000 0.32 ns/op
BenchmarkDoubleLoop-8 2000000000 0.34 ns/op
BenchmarkDoubleLoopGlobalVariable-8 2000000000 2.00 ns/op
PASS
ok github.com/cizixs/playground/loop-perf 5.597s

很明显,第一种和第二种方法具有相似的性能,而第三种方法要慢得多(大约慢 6 倍)。

我想知道为什么会这样,有没有办法提高全局变量访问的性能?

最佳答案

I wonder why this is happening.

编译器会优化您的整个代码。每个操作 300ps 意味着只有一个 noop 被“执行”。

关于golang 全局变量访问在基准测试中很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55005956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com