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

时间:2018-10-09 22:07:54

标签: go wait

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

1 个答案:

答案 0 :(得分:5)

由于您正在与远程服务器通信,因此有一个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