【发布时间】:2017-05-01 21:58:46
【问题描述】:
我是 golang 的新手,正在尝试用 golang 重写我的 java 服务器项目。
我发现,与传递值相比,将指针传递到通道会导致近 30% 的性能下降。
这是一个示例 sn-p: 包主 进口 ( “时间” “fmt” )
var c = make(chan t, 1024)
// var c = make(chan *t, 1024)
type t struct {
a uint
b uint
}
func main() {
start := time.Now()
for i := 0; i < 1000; i++ {
b := t{a:3, b:5}
// c <- &b
c <- b
}
elapsed := time.Since(start)
fmt.Println(t2)
}
更新。修复丢失的包
【问题讨论】:
-
你是怎么计算的?何定义“性能下降”?我对值 4000、8000 和 30% 之间的关系有点困惑。
-
问题不在于通道的性能,因为它是相同的,而应该是
Why is the performance impacted when I get a pointer from a local variable?,Martin 举了一个很好的例子。