在 geth 1.9.25v 中选择案例选择

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


我能知道哪个案例会首先被选中吗?如果多个案例准备就绪,是否有某种选择案例的算法?


慕斯王
浏览 164回答 1
1回答

慕村225694

我会推荐你去旅游。在Go Tour中,他们拥有易于理解的动手操场,他们也涵盖了他们的行为。select链接到选择去游览因此,一个阻止,直到它的一个案例可以运行,然后它执行该案例。如果多个准备就绪,它会随机选择一个。select而且,这不仅仅是关于和。ns.nextm.fromAny因此,让我们考虑以下两种情况:// For this case to be selected s.next should be readycase s.next <- n// For this case to be selected m.fromAny should be readycase m.fromAny <- n因此,假设两者同时准备就绪,则可以随机选择任何情况(在定义中也有描述)。s.nextm.fromAnyn是可用的,因此这取决于接收方通道:和 。s.nextm.fromAny因此,我们无法确定如果多个案例准备就绪,将选择哪种情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go