在并发应用程序中使用HTTP客户端的最佳方法

Gon*_*lez 10 concurrency http go goroutine

首先,我将描述我的情况.我必须从我的应用程序对多个API执行HTTPS请求,它们应该同时运行.我想知道我是否应该每个goroutine使用一个单独的HTTP客户端,或者我可以在所有goroutine中共享一个客户端.当然我想享受HTTP客户端提供的连接重用/池化,但我担心它是线程(又名goroutine)-safe,如果客户端将同时运行请求或者它们实际上将被排序?

wil*_*.09 22

根据文档(https://golang.org/src/net/http/client.go),Http客户端是线程安全的:

客户可以安全地同时使用多个goroutine.

  • @user4867444 - 首先,这个问题是一个完全合理的问题。其次,SO 是一个提出问题的地方,人们可以在这里帮助他人_理解_这些东西是如何工作的。第三,您可能不明白这是如何工作的,因为 http.Client 中有_are_锁。`RoundTripper` 是一个接口,默认情况下使用 `http.Transport`。这有“至少 3 个互斥体”,而无需进入更多子字段。接下来,cookie jar - `http.Jar`,再次......有一个互斥锁。事实上有多个锁,这个问题不仅有效,而且完全有可能在这里出现问题。 (3认同)
  • 如果 goroutine 这么多,单个客户端会成为瓶颈吗? (2认同)
  • @user4867444 请您向我们解释一下:为什么它不会成为瓶颈? (2认同)