Closed peasfarmer closed 1 year ago
客户端启动时协程之间同步是否存在以下bug, 导致有几率一启动是获取不到服务器列表,需要等待下一个刷新周期. 下图是左右分别为两个协程的执行时序
协程1 协程2 pairs := discovery.GetServices() 获取到pairs为空,协程1暂停,协程2开始执行 d.pairsMu.Lock() d.pairs = pairs d.pairsMu.Unlock() 由于协程1的WatchService还未执行,d.chans为空,for不能进入 for _, ch := range d.chans { ... ch <- pairs: ... } 协程1继续执行 client.selector = newSelector(selectMode, servers) //由于pairs为空,所以servers也为空 ... ch := client.discovery.WatchService() go client.watch(ch) ch内没有内容,导致不执行UpdateServer
@smallnest 麻烦确认是否有这个问题呢
pen碰巧client启动的·时候服务器有更新,会出现这样的情况,非常race
客户端启动时协程之间同步是否存在以下bug, 导致有几率一启动是获取不到服务器列表,需要等待下一个刷新周期. 下图是左右分别为两个协程的执行时序
@smallnest 麻烦确认是否有这个问题呢