老师,异步线程同步收发消息,如何理解更好
来源:9-10 利用RabbitMQ实现消息投递削峰填谷(一)

二境志
2021-02-24
在 refreshMessage 方法中,使用了 messageTask.receiveAsync(userId + “”); 异步接收消息的方式,可以避免耽误后面查询未读消息、新消息的语句的执行,而导致等待时间过长。
但是介绍中说道:如果使用异步收发消息,需要创建出一个消费者对象,挂在后台运行不会退出,没对象就处在等待状态,而且如果有 1w人,就会创建 1w对象,负荷比较大,因为异步方式会导致线程不会被回收。所以介绍中说,要使用同步的接发请求方式。但是好像视频中演示代码,全部使用的都是带 Async 的异步方法
重复看了很多次视频和笔记,有点绕晕了。
究竟这句话究竟怎么理解呐,麻烦老师给解一下惑
写回答
1回答
-
这里有两种异步方式:MQ的异步和线程执行的异步。MQ的异步更像是挂载后台阻塞运行,没收到消息也不退出,一直在后端运行。这种方式肯定不妥,所以我们选择的是MQ同步执行,收完消息就退出。线程池方面,我们选择的是异步线程执行MQ的同步接收消息。如果用MQ的异步方式,一直阻塞下去,线程池的线程永远不放回到线程池,线程池很快就被耗光
132021-09-20
相似问题