多线程异步和 MQ 异步其实在特性上有异曲同工之妙
多线程是进程内的概念、MQ 是分布式消息队列,两者不在同一个维度上;
至于区别,我想任何人都可以随便说出一二。
这个问题主要考候对于并发编程和分布式消息队列的理解,
以及如何考虑使用多线程异步和 MQ 来解决不同的问题。
多线程和 MQ 虽然在特性上都支持程序的异步操作,但是在实现本质上区别比较大,
我简单说一下较大区别的几个点
1. 处理任务的维度不同,多线程是同一个进程中的多个线程并行处理任务,MQ 是通
过把消息发送到不同应用节点的不同进程来 处理任务
2. 数据可靠性不同,多线程异步处理任务时,数据是基于共享内存来交互的,一旦程
序崩溃,内存中的数据会丢失;
使用 MQ 时,可以通过消息队列的持久化机制来保证消息的可靠性
3. 分布式能力方面,MQ 具备分布式能力,可以把消息分发到不同的节点存储和消费、
多线程只能在一个进程中处理任务
并且mq和线程池对于资源占用也有一些区别: 比如线程池对于cpu的消耗更大,当你的系统已经处于一个cpu高负载的情况,那就不适宜在这里继续使用线程池了。以免系统高负荷运行,出现问题。