


















过早优化是万恶之源,这里都是黑魔法,不是性能瓶颈慎用
GOGC 环境变量来增加触发GC的阈值,缺点是费内存。如果可以的话,用struct代替map。一个简单的例子就可以说明:
package main
type structDemoStruct struct {
First int
}
var (
mapDemo = make(map[int]int, 1)
structDemo = structDemoStruct{}
)
func mapIncr() {
mapDemo[1]++
}
func structIncr() {
structDemo.First++
}
package main
import (
"testing"
)
func BenchmarkMap(b *testing.B) {
for i := 0; i < b.N; i++ {
mapIncr()
}
}
func BenchmarkStruct(b *testing.B) {
for i := 0; i < b.N; i++ {
structIncr()
}
}
测试结果:
$ go test -bench .
goos: linux
goarch: amd64
BenchmarkMap-4 100000000 20.5 ns/op
BenchmarkStruct-4 1000000000 2.02 ns/op
PASS
ok _/home/jiajun/tests 4.299s
defer 虽然好用,但是也会带来性能损伤。如果是高并发的服务,可能要注意一下time.Now 比你想象中的慢,如果时间精确度不高,可以自己实现一个粗略的时钟[]byte和string转换比你想象中的慢,而且不能愉快的重复利用GOGC 来用内存换CPU时间此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。