我想知道在 Golang 中处理“事件”(带有通知器/接收器)概念的正确方法是什么。我想我需要使用频道,但不确定最好的方法。
具体来说,我有以下两个工人的程序。在某些情况下,“worker1”进入和退出“快速模式”并通过通道通知。“worker2”然后可以接收此事件。这工作得很好,但是这两个工人是紧密耦合的。特别是,如果 worker2 没有运行,worker1 在写入通道时会卡住等待。
在 Golang 中实现这个逻辑的最佳方式是什么?基本上,一个工人做某事并通知任何其他工人它已经这样做了。其他worker是否监听这个事件一定不能阻塞worker1。理想情况下,可以有任意数量的工人可以收听此事件。
有什么建议吗?
var fastModeEnabled = make(chan bool)
var fastModeDisabled = make(chan bool)
func worker1() {
mode := "normal"
for {
// under some conditions:
mode := "fast"
fastModeEnabled <- true
// later, under different conditions:
mode := "normal"
fastModeDisabled <- true
}
}
func worker2() {
for {
select {
case <-fastModeEnabled:
fmt.Println("Fast mode started")
case <-fastModeDisabled:
fmt.Println("Fast mode ended")
}
}
}
func main() {
go worker2()
go worker1()
for {}
}
湖上湖
相关分类