- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在编写利用网络的程序时,您会发现 CGO_ENABLED=0
的编译速度明显变慢。
例如最简单的HTTP服务器:
package main
import (
"flag"
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi! glad you requested %s.\n", r.URL.Path[1:])
}
func main() {
port := flag.Int("port", 9000, "")
flag.Parse()
http.HandleFunc("/", handler)
err := http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)
if err != nil {
log.Fatal(err)
}
}
时间是:
% time go build
go build 0.46s user 0.06s system 131% cpu 0.396 total
% time CGO_ENABLED=0 go build
CGO_ENABLED=0 go build 3.93s user 0.15s system 143% cpu 2.849 total
到目前为止,我没有使用与 C 的绑定(bind),所以 CGo 处理与否似乎无关紧要,我想做的是编译 100% 静态二进制文件,但如果速度变慢则不会。
这种行为的原因是什么?
最佳答案
问题是标准库包是在没有标志的情况下构建的。 CGO_ENABLED
更改构建标志,因此它不能使用预构建的包,因此大多数标准库需要重建。
正如提到的另一个答案,go build -i
将安装使用新标志构建的包,但这并不能真正解决很多问题,因为如果您安装使用 CGO_ENABLED= 构建的包0
,它将加速所有 future 使用 CGO_ENABLED=0
的构建,但如果没有它,它将减慢所有构建。
不幸的是,今天默认安装预构建包的方式非常低效,因为无论它是如何构建的,所有东西都以相同的名称进入同一个目录。如果你希望能够使用不同的标志快速构建 go 程序,除了执行 go build -i
你还需要使用 -installsuffix
和/或-pkgdir
标志。在我工作的系统中,我们有几种不同的编译模式,每种模式都有不同的标志(因为我们使用了很多旧的 C 代码),每种模式也有自己的 -pkgdir
.
关于go - 为什么 CGO_ENABLED=0 的编译速度较慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714278/
有人可以解释一下,在 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
我是一名优秀的程序员,十分优秀!