目前,我正在使用http GET请求连接到服务器。
Get
请求是从线程内部调用的。对于每个Get
请求,正在使用一个线程但问题是每个Get
请求,建立一个连接。因此,如果有10000 Get
个请求,那么将建立10000个连接。但是,我想首先在我和服务器之间建立一个TLS连接,然后创建一个线程,并从该线程我想通过已建立的连接发送Get
。
e.g。
for {
1. establish a tls connection
2. create thread go func()
}
func() {
resp, err := http.Get(url) // should be over already established tls connection
}
答案 0 :(得分:2)
首先,只是为了澄清,Go有 goroutines ,而不是线程。 Goroutines是合作轻量级的过程。 Go运行时将许多goroutine切片到可用的操作系统线程上。这个线程抽象是Go的一个重要特性。
关于使用goroutine进行许多并发GET请求的问题,最好让标准API处理请求的多路复用到您的连接。可能存在大量请求和较少数量的支持连接。如果您使用保持活动连接,则无需关心详细信息。
用于控制代理,TLS配置,保持活动,压缩和其他设置,create a Transport
HTTP / 1.1处理与http和https的保持活动连接。当向同一服务器发出许多请求时,这是一个好处。只要您不强制它在每次请求后关闭每个连接,您就可以从保留活动连接中获得很多好处。
通常的口头禅适用:不要过早优化。尽可能清楚地描述您需要做的事情。基准测试(Go有一个有用的微基准工具)。在您决定是否或如何优化性能之前,请执行此操作。