消息队列

✍ dations ◷ 2025-10-24 14:11:34 #数据结构,协同控制,并发计算,Unix,进程间通信

在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

一个 WIMP 环境像是 Microsoft Windows,借由优先的某些形式(通常是事件的时间或是重要性的顺序)来存储用户产生的事件到一个 事件贮列 中。系统把每个事件从事件贮列中传递给目标的应用程序。

实际上,消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。

目前,有很多消息队列有很多开源的实现,包括JBoss Messaging、JORAM、Apache ActiveMQ、Sun Open Message Queue、RabbitMQ、IBM MQ、Apache Qpid、Apache RocketMQ和HTTPSQS。

消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息,这和大多数通信协议是不同的。例如WWW中使用的HTTP协议(HTTP/2之前)是同步的,因为客户端在发出请求后必须等待服务器回应。然而,很多情况下我们需要异步的通信协议。比如,一个进程通知另一个进程发生了一个事件,但不需要等待回应。但消息队列的异步特点,也造成了一个缺点,就是接收者必须轮询消息队列,才能收到最近的消息。

和信号相比,消息队列能够传递更多的信息。与管道相比,消息队列提供了有格式的数据,这可以减少开发人员的工作量。但消息队列仍然有大小限制。

消息队列除了可以当不同线程或进程间的缓冲外,更可以透过消息队列当前消息数量来侦测接收线程或进程性能是否有问题。

相关

  • 滴定管滴定管(burette),是化学实验中的一种仪器,是容量分析的基本仪器之一。细长管状的一种精密玻璃量器。滴定管属于量出式量器,在滴定操作中盛装滴定剂溶液,并放出一定量溶液至滴定终
  • 蛋白质与蛋白质对接分子对接(macromolecular docking )是分子模拟的重要方法之一,其本质是两个或多个分子之间的识别过程,其过程涉及分子之间的空间匹配和能量匹配。分子对接方法在药物设计、材料
  • 俄罗斯国防工业国防工业对俄罗斯至关重要,其国内经济相当仰赖军需工业,更在世界军火贸易市场扮演重要的角色。俄罗斯是世界上第二大的军火出口国,仅次于美国。其2016年军工业出口总额为64.32
  • 自动化自动化技术是一门综合性技术,它和控制论、信息论、系统工程、计算机技术、电子学、液压气压技术、自动控制等都有着十分密切的关系,而其中又以“控制理论”和“计算机技术”对
  • 阿洛伊斯·阿尔茨海默阿洛伊斯·阿尔茨海默(德语:Alois Alzheimer,1864年6月14日-1915年12月19日),德国精神病学家,他首先发表了老年痴呆症的病例,后来被命名为阿尔茨海默病。阿尔茨海默的父亲是家乡的一
  • 有机农业和粮食安全国际会议联合国粮食及农业组织(法语:L'Organisation des Nations Unies pour l'Alimentation et l'Agriculture,缩写为ONUAA; 英语:Food and Agriculture Organization of the United Na
  • 皮亚琴期皮亚琴期(英语:Piacenzian)是上新世的晚期阶段。其起止时间为3.6百万年前和2.58百万年前。
  • Fr.埃利亚斯·芒努斯·弗里斯(瑞典语:Elias Magnus Fries,1794年8月15日-1878年2月8日),瑞典生物学家。他在六十多年的科研生涯中,搜集了欧洲各地大量的真菌标本,对其进行了科学、系统
  • 邦蒂群岛邦蒂群岛(Bounty Islands)是属于新西兰的无人群岛。位于南纬47度40分到47度45分、东经179度02分到179度07分之间。是新西兰的世界遗产亚南极群岛的一部分。这个群岛于1788年被
  • 砹化氢砹化氢,又称氢砹酸(化学式:HAt),是一种卤氢酸,由氢原子与砹原子组成的共价化合物。这种化合物溶于水生成氢砹酸,性质和其他四种卤化氢相似——实际上具备氢卤酸中最强的酸性。但它