gpt4 book ai didi

go - 根据key向特定go routine发送消息

转载 作者:IT王子 更新时间:2023-10-29 00:47:45 25 4
gpt4 key购买 nike

我想实现以下内容:

  • 运行多个 worker goroutine,每个 goroutine 执行一些业务逻辑。
  • 不同的 Http 处理程序将工作分配给这些工作人员。
  • 每个 goroutine 的输入(通过 channel )将是一些数据(State),其中包含一个 Key。
  • 具有相同 key 的多个数据也是可能的。

我们的要求是对特定 Key 的处理必须序列化。例如goroutine 1 正在处理与 Key:1234 相关的数据,那么在 goroutine 1 完成其工作之前,其他 goroutine 不应处理同一键的其他数据。

有人可以建议最好的方法吗?

最佳答案

我正在使用 map[Key]chan State Map 来存储 Key 到 Channel 的映射。为每个 Key 创建 Go Routine。

var keymap sync.Map
func handle_webservice(req WebReq) {
val, ok := keymap.Load(req.Key)
if ok {
val1, _ := val.(chan Event)
val1 <- Event{Data: req}
} else {
ch := make(chan Event, 5)
go Worker(ch)
keymap.Store(req.Key, ch)
ch <- Event{Source: WEBSERVICE, Data: req}
}

func sendToWorker(event Event) {
val, ok := keymap.Load(event.Key)
if ok {
val1, _ := val.(chan Event)
select {
case val1 <- event:
default:

}
}
}

关于go - 根据key向特定go routine发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55377282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com