请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,异步线程同步收发消息,如何理解更好

在 refreshMessage 方法中,使用了 messageTask.receiveAsync(userId + “”); 异步接收消息的方式,可以避免耽误后面查询未读消息、新消息的语句的执行,而导致等待时间过长。

但是介绍中说道:如果使用异步收发消息,需要创建出一个消费者对象,挂在后台运行不会退出,没对象就处在等待状态,而且如果有 1w人,就会创建 1w对象,负荷比较大,因为异步方式会导致线程不会被回收。所以介绍中说,要使用同步的接发请求方式。但是好像视频中演示代码,全部使用的都是带 Async 的异步方法

重复看了很多次视频和笔记,有点绕晕了。
究竟这句话究竟怎么理解呐,麻烦老师给解一下惑

正在回答

1回答

这里有两种异步方式:MQ的异步和线程执行的异步。MQ的异步更像是挂载后台阻塞运行,没收到消息也不退出,一直在后端运行。这种方式肯定不妥,所以我们选择的是MQ同步执行,收完消息就退出。线程池方面,我们选择的是异步线程执行MQ的同步接收消息。如果用MQ的异步方式,一直阻塞下去,线程池的线程永远不放回到线程池,线程池很快就被耗光

1 回复 有任何疑惑可以回复我~
  • 提问者 二境志 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-02-26 18:43:47
  • 老师视频2:51中好像口误了? 您说的是:同步收发消息message task不会被回收,所以我们要用同步收发消息。
    回复 有任何疑惑可以回复我~ 2021-09-20 04:56:07
  • 我也感觉是口误了,我反反复复听了很多遍,感觉逻辑不对
    回复 有任何疑惑可以回复我~ 2021-09-20 23:46:36
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信