消息队列

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

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

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

相关

  • 灌溉灌溉就是人为方式使用天然降水(雨水)以外的其他水源供给土地或土壤水分,多半是用来种植农作物或其他植物,也可以用来维持地貌景观,或在干燥地带或是在过度降雨后的地区进行植被重
  • 中国传统游戏列表中国传统游戏,可分为棋类、牌类、猜射等类型。若干项目被列入中国国家级非物质文化遗产。
  • 布里斯托尔大学布里斯托大学(University of Bristol),位于英格兰西部布里斯托市的一所英国大学,其历史可追溯到1876年建立的布里斯托大学学院。该校是英国老牌顶尖大学“红砖”高等学府之一,也
  • JAK-STAT通路JAK-STAT信号传送途径(英语:JAK-STAT signaling pathway)使得细胞外的化学信号跨越细胞膜并将信息传送到细胞核内DNA上的基因启动子上,最终引起细胞中DNA转录与活性水平发生改变
  • 祝融型小行星祝融型小行星(Vulcanoid)是假设上存在于行星的水星轨道之内,在动力学稳定区内绕行太阳的小行星族群,与太阳距离介乎0.08至0.21个天文单位之间。它们的名称源自假设中的祝融星,但
  • 怀玉山脉怀玉山,广义指怀玉山脉,位于中国江西省东北部,东起玉山县、德兴市与浙江省开化县交界处,西延至鄱阳湖平原。长百余千米,是信江与乐安江的分水岭。主峰玉京峰位于玉山县北境,海拔18
  • 美国选举 美国众议院议长:南希·裴洛西(民主党) 多数党领袖(英语:Party leaders of the United States House of Representatives):斯坦利·霍耶(民主党) 少数党领袖(英语:Party leaders of the
  • 努米底亚努米底亚(前202年-前46年)是一个古罗马时期的柏柏尔人王国,如今这一国家已经消亡。其领土大约相当于现今的阿尔及利亚东北以及突尼斯的一部分(皆位于北非)。当时以出产精锐骑兵闻
  • 讷勒赫讷勒赫(1881年6月4日(光绪七年五月初八)-1917年2月14日(民国六年正月二十三))爱新觉罗氏,满洲镶蓝旗人,顺承质郡王。讷勒赫生于光绪七年辛巳五月初八日寅时,属于恒字辈。讷勒赫于光绪
  • 胡统虞胡统虞(1604年-1652年),字孝绪,号此菴,湖南武陵人。明末清初理学家、官员。胡统虞于崇祯十六年(1643年)举癸未科进士。授翰林院庶吉士。不久,李自成攻破京师,胡统虞被执。随即清军入关