有10000个链接 收到的数据往一个channel里面写入,这种会有啥问题没?有没有更好的办法?
发布于 1 年前 作者 liangdas 827 次浏览 来自 问答

w: 只要监控好channel的处理能力就行,把channel的缓存区调整到正确区间即可 q: 就是 怕 处理channel的这个goroutine和其他处理链接的goroutine被 go runtime公平对待就不好了 我希望 处理 漏斗的这个goroutine执行权重能高一点。。 w: 不应该这样考虑goroutine 执行权应该无法控制的只要做好消息分流机制就可以了 w: 可以为这个channel设置一个消息缓冲去,这个channel可以由多个goroutine提取消息来处理,每一个goroutine只在处理完一个消息以后才继续从channel提取消息继续处理。这就是后端常用的异步消息队列模型了,这种模式下goroutine不会遇到消息风暴造成阻塞,goroutine只处理自己力所能及的事情,channel可以缓存goroutine来不及处理的消息等goroutine空闲时处理 q: 缓冲空间也有大小啊 w: 因此这种模式下你可以监控,如果channel里面未处理的消息长期处于高位,就可以考虑增加goroutine了,如果是部分时间出现消息风暴那channel就可以缓存消息一段时间,降低后端goroutine压力 q: 如果channel只有100的缓冲空间,突然来1000条消息肯定就费了 w: mqant的分布式模式下用的rabbitmq队列,可以积压的消息很多,不会存在这个问题[表情]顺便打给广告…

1 回复

可以啊,聊天记录随手就是一份技术文档

回到顶部