登录
首页 >  Golang >  Go问答

向特定 goroutine 发送消息的方式

来源:stackoverflow

时间:2024-02-29 19:36:21 168浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《向特定 goroutine 发送消息的方式》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我想实现以下内容:

  • 多个工作协程正在运行,每个协程执行一些业务逻辑。
  • 不同的 Http 处理程序将工作分配给这些工作人员。
  • 每个 goroutine 的输入(通过通道)将是一些数据(状态),其中有一个 Key。
  • 也可以使用相同密钥的多个数据。

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

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


解决方案


我正在使用map[key]chan state map来存储key到channel的映射。为每个key创建go例程。

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:

        }
    } 
}

今天关于《向特定 goroutine 发送消息的方式》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>