golang 中的并发设计 - 等待一定数量的 goroutine



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

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

例如:

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

最新更新