原文:任务与消息队列
https://zhuanlan.zhihu.com/p/37648767?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
理解
什么是任务(Task)?即异步执行逻辑。某种情况下可以等同于多线程;
为什么需要异步执行?
因为同步执行耗时太久,响应时间太长,影响用户体验。对于非恶心不影响主流程的业务,可以异步执行。
简单的异步实现方式:多线程;
多线程的不足:只是解决了响应时间的问题。
如果同一时间响应太多,那么创建线程太多(也可以线程池,但是如果请求太多,线程池被耗尽,依旧会影响相应时间),服务器可能会挂掉。
高级的实现方式:消息队列;
请求被放入消息队列,消息队列本身可以存储一定的数量的消息(缓存),会有专门的处理逻辑从消息队列中取出消息进行处理。
可以理解为空间换时间;
优点:错峰控流和解耦
广播和消息队列:
广播是消息队列的高级进化方式:
消息队列:一个消息只有一个接收方处理;
广播:一个消息有多个接收方处理;
什么是任务(Task)?即异步执行逻辑。某种情况下可以等同于多线程;
为什么需要异步执行?
因为同步执行耗时太久,响应时间太长,影响用户体验。对于非恶心不影响主流程的业务,可以异步执行。
简单的异步实现方式:多线程;
多线程的不足:只是解决了响应时间的问题。
如果同一时间响应太多,那么创建线程太多(也可以线程池,但是如果请求太多,线程池被耗尽,依旧会影响相应时间),服务器可能会挂掉。
高级的实现方式:消息队列;
请求被放入消息队列,消息队列本身可以存储一定的数量的消息(缓存),会有专门的处理逻辑从消息队列中取出消息进行处理。
可以理解为空间换时间;
优点:错峰控流和解耦
广播和消息队列:
广播是消息队列的高级进化方式:
消息队列:一个消息只有一个接收方处理;
广播:一个消息有多个接收方处理;