golang中的并发设计——等待一定数量的goroutines

Concurrency Design in golang - wait for a certain number of goroutines

我有一个包含 10 个服务器的列表,其中一个服务器是 主要。它负责向其余 9 台服务器发送 请求,并且必须等待 至少其中 5 台服务器的回复。 我可以发送这些使用 goroutines 异步请求,一旦我收到 至少 5 个 的回复,我就可以继续执行了。一般来说,我如何使用 go 设计它?随意使用您喜欢的任何工具。您可以假设这 10 台服务器是隔离的,并且它们之间没有任何共享。

由于您正在与远程服务器通信,因此 context.Context 在 10 个请求中的 5 个完成后被取消可能是有意义的。您可以将该上下文传递给您正在使用的任何网络功能。

例如:

ctx, cancel := context.WithCancel(context.Background())
n := int32(10)
// Inside the goroutine
if atomic.AddInt32(&n, -1) == 5 {
    cancel()
}
<-ctx.Done() // returns once the context is canceled