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

在 geth 1.9.25v 中选择案例选择

在 geth 1.9.25v 中选择案例选择

Go
慕斯王 2022-09-12 21:16:57
func (m *FairMix) runSource(closed chan struct{}, s *mixSource) {    defer m.wg.Done()    defer close(s.next)    for s.it.Next() {        n := s.it.Node()        fmt.Println("discmix Addsource : ", n.ID())        select {        case s.next <- n:            fmt.Println("s.next <- n :", n.ID())        case m.fromAny <- n:            fmt.Println("m.fromAny <- n :", n.ID())        case <-closed:            return        }    }}这是以太坊 geth 1.9.25v 代码。在操作中,这两个 &变量都在等待 。selects.nextm.fromAnyn但是当我运行程序时,与大小写相比,被更频繁地选择。case s.next <- nm.fromAny <- n我能知道哪个案例会首先被选中吗?如果多个案例准备就绪,是否有某种选择案例的算法?
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

我会推荐你去旅游。在Go Tour中,他们拥有易于理解的动手操场,他们也涵盖了他们的行为。select


链接到选择去游览


因此,一个阻止,直到它的一个案例可以运行,然后它执行该案例。如果多个准备就绪,它会随机选择一个。select


而且,这不仅仅是关于和。ns.nextm.fromAny


因此,让我们考虑以下两种情况:


// For this case to be selected s.next should be ready

case s.next <- n



// For this case to be selected m.fromAny should be ready

case m.fromAny <- n

因此,假设两者同时准备就绪,则可以随机选择任何情况(在定义中也有描述)。s.nextm.fromAny


n是可用的,因此这取决于接收方通道:和 。s.nextm.fromAny


因此,我们无法确定如果多个案例准备就绪,将选择哪种情况。


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

添加回答

举报

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