1.两者内部都使用了队列,如阻塞队列、优先级队列;
2.使用线程池时应用服务器既充当生产者又充当消费者,也是消息队列中间件的实现者,使用消息队列时中间件、生产者、消费者可以部署在不同的应用机器上(当然也可以部署在一台服务器上但很少有人这么用);
3.出于第2点线程池更适合非分布式的系统,但在分布式架构下消息队列明显是更优项;
4.使用消息队列会带来额外的网络开销;
5.消息队列的耦合性更低,可扩展性更好,适用于弱一致性的场景,如对log日志的解耦;
6.消息队列自动实现消息的持久化,中间已经实现了大量功能,如消息转发、消息拒绝、消息重试,以及对消息的一些监控,例如消息的消费状态、消息的消费速率、消息内容查询等,使用线程池如果需要很多功能还要自己去实现,例如想要知道执行状态还需要打印队列数量、计算消息消费速度;
7.在不同系统间的服务调用(调用协议也可能不一致)线程池很难实现或开销很大,这时候消息队列可以屏蔽不同机器或不同协议的问题;
8.使用消息队列会提升系统的复杂度,网络抖动怎么办?最大队列长度怎么设置?超时时间又设置多少?Qos又设置为多少?消费者多少个比较合适?Channel cache size又该设置为多少?业务线可能都是用同一个Mq,你占资源太多,或者设计不当可能会导致整个Mq故障。

线程池和消息队列的一些理解相关推荐

  1. C10k破局(一)——线程池和消息队列实现高并发服务器

    一.C10k的由来 互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合.互联网还不够普及,用户也不多,一台服务器同时在线100个用户估计在当时已经算是大型应用了,所以并不存在什么 C10K ...

  2. 消息队列 MQ 入门理解

    转载于阿里官方文档,把一些基础部分提炼整理了一下 功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系 ...

  3. 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理

    1.一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务.阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使 ...

  4. (三)消息队列——AMQP的理解以及RabbitMQ概述

    一.消息队列--AMQP的理解: 二.RabbitMQ概述: 1.RabbitMQ: 2.基础架构: 3.RabbitMQ的六种工作模式: 一.消息队列--AMQP的理解: AMQP,即 Advanc ...

  5. Java 线程池原理和队列详解

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/51701508 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  6. 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?

    线程池中阻塞队列的作用: ⼀般的队列只能保证作为⼀个有限⻓度的缓冲区,如果超出了缓冲⻓度,就⽆法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续⼊队的任务. 阻塞队列可以保证任务队列中没有任务 ...

  7. 线程池中阻塞队列的作用?为什么是先添加列队而不是先 创建最大线程?

    1.一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度 ,就无法保留当前的任务 了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务. 阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线 ...

  8. java线程池队列大小_GitHub - sunshanpeng/dark_magic: 合理估算线程池大小及队列数

    合理估算java的线程池大小及队列数 原理分析 先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每 ...

  9. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

最新文章

  1. 《自己动手写Docker》书摘之三: Linux UnionFS
  2. python表白源代码-python七夕浪漫表白源码
  3. day15 接口与异常
  4. 使用 Carla 和 Python 的自动驾驶汽车第 2 部分 —— 控制汽车并获取传感器数据
  5. 对于一个采用字符数组存放的字符串str,设计一个递归算法StrLength(char *str)求其字符个数(长度)。递归求字符串长度
  6. QT [005] 数据库设计 - 一个被忽略的数据库show类 - ConnectionWidget Class
  7. 地平线开源轻量级、有效可变组卷积的人脸识别网络VarGFaceNet
  8. java验证码Kaptcha
  9. Android之ListView优化(使用Lrucache,图片滑动时使用默认图片,停止时加载)
  10. 使用HttpWebRequest方式访问外部接口
  11. Linux内核--网络栈实现分析(一)--网络栈初始化
  12. 书摘---创业36条军规7:业务的五个问题
  13. 如果你不释放MogaFX外汇,你将无法获得交易或投资
  14. 如何保护自己的颈椎?
  15. 【饭谈】:开发说他要是不写bug,测试就会失业了。
  16. 这是一篇能够教会你运营阿里巴巴国际站的文章
  17. scratch学习_和 Vicky 一起学习 Scratch 系列之十三 — 作曲
  18. 算法基础——蓝桥杯(python实现,实际上大多数用c++更明白易懂)(第一部分,共12个小题)
  19. USB串口导致鼠标乱跳
  20. matlab 概率密度 混合分布 拟合,概率密度函数拟合和求概率分布函数

热门文章

  1. RabbitMQ 集群
  2. 《结合DDD讲清楚编写技术方案的七大维度》再讨论
  3. 情感化设计中的手绘应用表现
  4. uint16 累加_uint8和uint16 是什么数据类型?
  5. fullpage 的方法介绍及使用
  6. android+获取荣耀手机内置+存储,这9款华为、荣耀手机正式开启Android9.0内测了,每款机型2000...
  7. ROC的定义与计算原理
  8. Win10 Mobile正式版10586.682更新与修复内容大全
  9. 我们到底需要什么样的机器人!
  10. 故障排查:ArcGIS Data Store升级失败(Attempt to configure data store failed)