希望使用一个1对多的channel,通知多个worker中的某一个停止。
发送某个worker的id号,当worker收到了,并且和自己的id一致,就停止工作。
使用发现,通过crossbeam_channel这个信道发送,worker接收是随机的。
id可能被某一个id不一致的worker随机收到,停止不成功。
那这个crossbeam_channel的使用场景是什么啊?
还以为这个多对多,是广播模式。
1
共 7 条评论, 1 页
评论区
写评论最后用watch channel搞定了,多谢大神。
--
👇
johnmave126: 我记得tokio的
sync::broadcast
是你要的效果,但是不记得sync生态圈有没有类似的了我记得tokio的
sync::broadcast
是你要的效果,但是不记得sync生态圈有没有类似的了这么想确实是这么用的,牛,多谢大佬解惑。
--
👇
Easonzero: 用于任务级并行的, 多个相同的无上下文任务, 争抢输入数据, 并无序送输出.
--
👇
heliping: 看了github的issue,貌似确实不支持,
实在不明白如果广播不支持,那这个多对多的场景是什么?有点鸡肋。
请问下,需要一个全局可变的变量。
因为是web后台的服务,开始和停止是不同的handler。需要共享一个全局的可变的共享变量。 这样worker轮询这个变量,停止的handler写着变量,然后worker读到就停止。 发现rust这个变量好难啊。 lazy和once_cell这种好像只支持一次初始化。
使用直接静态,报错,const call non-const。
--
👇
songzhi: 如果只是为了通知worker停止工作,搞一个原子变量worker那边去轮询或者条件变量worker那边去等待就可以了。
用于任务级并行的, 多个相同的无上下文任务, 争抢输入数据, 并无序送输出.
--
👇
heliping: 看了github的issue,貌似确实不支持,
实在不明白如果广播不支持,那这个多对多的场景是什么?有点鸡肋。
看了github的issue,貌似确实不支持,
实在不明白如果广播不支持,那这个多对多的场景是什么?有点鸡肋。
如果只是为了通知worker停止工作,搞一个原子变量worker那边去轮询或者条件变量worker那边去等待就可以了。