运行时:选择go不需要锁定涉及选择的所有通道,

g6baxovj  于 6个月前  发布在  Go
关注(0)|答案(3)|浏览(56)

我阅读了select函数:

func selectgo(cas0 *scase, order0 *uint16, ncases int) (int, bool) {
   ...
	// lock all the channels involved in the select
	sellock(scases, lockorder)

}

为什么我们应该锁定所有通道?
我认为在循环中逐个锁定可能更好,因为它会更快。

weylhg0b

weylhg0b1#

Dmitry尝试过这个:https://go-review.googlesource.com/c/go/+/7570
TL; DR它很难做到正确。我们从未相信它是正确的。

hfsqlsce

hfsqlsce2#

Dmitry 尝试过这个方法:https://go-review.googlesource.com/c/go/+/7570

总结:要正确实现这一点很困难。我们从未确信它是正确的。

大多数情况下,它可能工作得很好,但选择是 go 中最重要的角色之一。当选择中的通道增加并同时操作这些通道时,性能会下降。

相关问题