消息队列

✍ dations ◷ 2025-04-13 15:48:39 #数据结构,协同控制,并发计算,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之前)是同步的,因为客户端在发出请求后必须等待服务器回应。然而,很多情况下我们需要异步的通信协议。比如,一个进程通知另一个进程发生了一个事件,但不需要等待回应。但消息队列的异步特点,也造成了一个缺点,就是接收者必须轮询消息队列,才能收到最近的消息。

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

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

相关

  • 航天动力学航天动力学是研究航天器和运载器在飞行中所受的力及其在力作用下的运动的学科,又称星际航行动力学、天文动力学和太空动力学。航天动力学研究的运动包括航天器的质心运动,称轨
  • 双边合作中非关系是指中国与所有非洲国家的关系,此关系被中国形容为“中非友好合作大家庭”。大多数非洲国家均有参与,直至2020年3月22日,只有斯威士兰仍继续与中华民国建交,该国从未与
  • 铕化合物铕化合物是镧系金属铕(元素符号:Eu)形成的化合物,在这些化合物中,铕一般显+3价,如EuCl3、Eu(NO3)3等;+2价的铕化合物是已知的,这也是水溶液中镧系金属最稳定的二价离子。氧化亚铕(俄
  • 高频主动式极光研究计划阴谋论高频主动式极光研究项目(英语:High Frequency Active Auroral Research Program,常缩写为HAARP),是一个由美国空军、美国海军、国防高等研究计划署及阿拉斯加大学所共同合作的电
  • 宋子良宋子良(1899年-1987年5月11日),民国时期的实业家、银行家,籍贯海南文昌县,出身著名的宋嘉澍家族。父亲宋嘉澍是美南监理会(今卫理公会)的牧师,后经营出版业致富,资助孙中山革命,母亲倪
  • 薄姑薄姑,又被记作蒲姑,中国商代的的一个诸侯国,侯爵。该国故地位于今山东省鲁北地区,西周初年被灭后其地被封给了齐国。《左传·昭公九年》记载“及武王克商,蒲姑、商奄,吾东土也”,周
  • 1924年冬季奥林匹克运动会1924年冬季奥林匹克运动会(英语:the I Olympic Winter Games,法语:les Iers Jeux olympiques d'hiver),也就是第一届冬季奥林匹克运动会,在法国的霞慕尼举行。原本称为“国际冬季运
  • 加利福尼亚大学圣巴巴拉分校加州大学圣巴巴拉分校(英语:University of California, Santa Barbara,简称UCSB,又常被译作圣巴巴拉加州大学),是一所著名的公立研究型大学,加州大学系统的成员之一。学校坐落在位
  • 佩内洛普·菲兹杰拉德佩内洛普·菲兹杰拉德 (1916年12月17日–2000年4月28日) 布克奖获奖者,是英国的小说家、诗人,作家和传记作者。 2008年, 泰晤士报称她为"自1945年以来的50个最伟大的英国作家"
  • 巴文德王朝巴文德王朝为存在于七世纪的伊朗古王朝,统治区域约为伊朗北部塔巴里斯坦(Tabaristan)一带。他们自七世纪起就以游击战等方式抵抗伊斯兰教及穆斯林武力的进入,此对峙一直持续到十