使用 -race 标志构建 go 程序是否有任何性能损失?

Kee*_*bze 5 concurrency build go

您好,我想知道在使用构建的生产中运行 go 程序是否有任何性能损失

go build -race
Run Code Online (Sandbox Code Playgroud)

Erw*_*idt 8

您可以在描述 go race detector 的文章中阅读相关内容,网址为https://go.dev/doc/articles/race_detector

引用那篇文章(最后一段):

运行时开销

竞争检测的成本因程序而异,但对于典型的程序,内存使用量可能会增加 5-10 倍,执行时间可能会增加 2-20 倍。

目前,竞争检测器为每个 defer 和 receive 语句分配额外的 8 个字节。这些额外的分配在 goroutine 退出之前不会被恢复。这意味着,如果您有一个长时间运行的 goroutine 定期发出 defer 和 receive 调用,则程序内存使用量可能会无限增长。这些内存分配不会显示在runtime.ReadMemStats 或runtime/pprof 的输出中。