gpt4 book ai didi

go - 使用 http.Get 会比在 exec.Command 中使用 curl 慢吗?

转载 作者:行者123 更新时间:2023-12-01 22:43:53 25 4
gpt4 key购买 nike

我有一个程序,我在其中 curl 网页,然后使用 exec.Command 在输出上运行一些命令。这是代码:

        cmd := `curl -s https://example.com | <some command 1> | <some command 2>`
out, err := exec.Command("bash", "-c", cmd).Output()```

将使用 resp, err := http.Get("https://example.com")在 Go 中,而不是使用 curl,然后将响应正文发送到 exec.Command 会更慢吗?

我问这个是因为,通过使用 http.Get,输出从 Go 程序发送到操作系统,然后操作系统对输出执行操作,然后将其发送回 Go 程序。应该是性能受到影响,对吧?

最佳答案

确切地!

除了套接字发送系统调用之外,创建 an external process 还会产生额外的开销。并在它之间进行通信:

https://golang.org/src/os/exec/exec.go?s=6250:6295#L416

这将显着改变应用程序的性能和资源使用情况,因为您的应用程序需要操作系统级别的进程。考虑客户端执行 exec.Command 的情况。基于实现 100 次,需要 100 个操作系统级别的进程才能实现这一点。

但另一方面考虑直接使用 http 库的情况,系统调用都停留在 gos 进程空间内。

使用本地 API 创建基准以显示这些 exec.Command 的开销应该很容易。来电,也去提供pprof这将允许您在低得多的级别上进行概要分析,以向您显示 exec.Command 所涉及的开销来电。

关于go - 使用 http.Get 会比在 exec.Command 中使用 curl 慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58507527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com