我阅读了select函数:
func selectgo(cas0 *scase, order0 *uint16, ncases int) (int, bool) { ... // lock all the channels involved in the select sellock(scases, lockorder) }
为什么我们应该锁定所有通道?我认为在循环中逐个锁定可能更好,因为它会更快。
weylhg0b1#
Dmitry尝试过这个:https://go-review.googlesource.com/c/go/+/7570TL; DR它很难做到正确。我们从未相信它是正确的。
hfsqlsce2#
Dmitry 尝试过这个方法:https://go-review.googlesource.com/c/go/+/7570
总结:要正确实现这一点很困难。我们从未确信它是正确的。
大多数情况下,它可能工作得很好,但选择是 go 中最重要的角色之一。当选择中的通道增加并同时操作这些通道时,性能会下降。
wd2eg0qa3#
See also: #8896
3条答案
按热度按时间weylhg0b1#
Dmitry尝试过这个:https://go-review.googlesource.com/c/go/+/7570
TL; DR它很难做到正确。我们从未相信它是正确的。
hfsqlsce2#
Dmitry 尝试过这个方法:https://go-review.googlesource.com/c/go/+/7570
总结:要正确实现这一点很困难。我们从未确信它是正确的。
大多数情况下,它可能工作得很好,但选择是 go 中最重要的角色之一。当选择中的通道增加并同时操作这些通道时,性能会下降。
wd2eg0qa3#
See also: #8896