- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我是 golang 的新手,正在尝试用 golang 重写我的 java server 项目。
我发现,与传递值相比,将指针传递到 channel 会导致性能下降近 30%。
这是一个示例片段: 包主 进口 ( “时间” “调频” )
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)
}
最佳答案
作为一个值,它可以被栈分配:
go run -gcflags '-m' tmp.go
# command-line-arguments
./tmp.go:18: inlining call to time.Time.Nanosecond
./tmp.go:24: inlining call to time.Time.Nanosecond
./tmp.go:25: t2 escapes to heap
./tmp.go:25: main ... argument does not escape
63613
作为指针,它逃逸到堆中:
go run -gcflags '-m' tmp.go
# command-line-arguments
./tmp.go:18: inlining call to time.Time.Nanosecond
./tmp.go:24: inlining call to time.Time.Nanosecond
./tmp.go:21: &b escapes to heap <-- Additional GC pressure
./tmp.go:20: moved to heap: b <--
./tmp.go:25: t2 escapes to heap
./tmp.go:25: main ... argument does not escape
122513
转义到堆会引入一些开销/GC 压力。
再看汇编,指针版本还引入了额外的指令,包括:
go run -gcflags '-S' tmp.go
0x0055 00085 (...tmp.go:18) CALL runtime.newobject(SB)
在调用 runtime.chansend1
之前,非指针变体不会产生这种开销。
关于pointers - 为什么将指针传递给 channel 速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41178729/
有人可以解释一下,在 DOM 中搜索元素时,为什么 Xpath 被认为比 CSS 选择器慢。不同的选择器是否有不同的引擎(例如 Xpath、CSS 选择器等) 谢谢 最佳答案 Xpath 并不是被认为
在我们的一个 MVC 页面中尝试加速某些 ajax 调用时,我遇到了一些我无法真正解释的奇怪行为。我每隔 N 秒就会进行一些 ajax 调用,以轮询一些统计数据。 似乎在物理上不同的文件中对 Cont
Background 尝试进行一个简单的实验,看看传统的 if 语句检查 null 是否比 Apache Commons Lang StringUtils isEmpty/isBlank 更快。 为了
我正在从 Android 设备调用 rest api,并且看到与 PC 相比的速度差异,我感到非常惊讶。下面是来自 PC 上的休息工具的图像。 我尝试了几个库,如 Retrofit、Volley 和常
为什么 scipy.distance.cdist 使用 float32 和 float64 时性能差异很大? from scipy.spatial import distance import num
我是一名优秀的程序员,十分优秀!