0
我想知道在Golang中處理「事件」(包含通知器/接收器)概念的正確方法是什麼。我想我需要使用渠道,但不知道最好的方法。在Golang中實現「事件」(包含通知者/接收者)的概念?
具體來說,我有兩名工人下面的程序。在某些情況下,「worker1」進入和退出「快速模式」並通過通道通知。然後「worker2」可以接收此事件。這工作正常,但這兩名工人緊密相連。特別是,如果worker2未運行,則在寫入通道時,worker1會停滯不前。
Golang的最佳實施方式是什麼?基本上,一名工人做了一些事情,並通知任何其他工人。其他工作人員是否傾聽此事件不得阻止工作人員1。理想情況下,可能有任何數量的工作人員可以傾聽此事件。
有什麼建議嗎?
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 {}
}
會['sync.Condition'(https://golang.org/pkg/sync/#Cond)是你要尋找什麼? – JimB
[Property change notification in go]可能重複(http://stackoverflow.com/questions/29488010/property-change-notification-in-go) – icza
如果唯一的擔心是阻止寫入渠道。誠然,這不是一個好的解決方案,因爲您需要對緩衝區大小進行一些預先估計。編輯 - 忽略 - 只是注意到他們是bool頻道。 – Sridhar