为了账号安全,请及时绑定邮箱和手机立即绑定

Go 并发模式 - 这会留下挂起的 goroutines 吗?

Go 并发模式 - 这会留下挂起的 goroutines 吗?

Go
有只小跳蛙 2021-09-27 09:58:49
在 Rob Pike关于 Go Concurrency Patterns的Google IO 演讲中,他提供了此代码作为如何从多个副本服务器中选择最快响应者的示例:func First(query string, replicas ...Search) Result {    c := make(chan Result)    searchReplica := func(i int) { c <- replicas[i](query) }    for i := range replicas {        go searchReplica(i)    }    return <-c}问题:这不会让 N-1 个副本 goroutine 阻塞在通道写入上吗?在演讲结束后的讨论中,一位听众似乎在问这个问题,但得到了一种轻松波浪式的回应。我倾向于将第三行更改为这样的:searchReplica := func(i int) {   select {      case c <- replicas[i](query):      default: // non-blocking write }}
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

你是对的。但这并不适合单张幻灯片。他谈论的是并发模式,不一定是执行它的代码。

当然,我仍然不会将该代码放在幻灯片上......


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信