消息队列

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

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

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

相关

  • 驴(学名:Equus africanus asinus)是常见的马科马属家畜,是非洲野驴被人类驯化所形成的亚种,和马体形相似,但耳朵长,尾巴有尾柄,类似牛尾巴。驴是奇蹄目的成员。其他成员包括斑马和马
  • 比属刚果比属刚果(法文:Congo belge)是比利时在1908年至1960年在今日刚果民主共和国的殖民地。在1885年,欧洲各国举行了柏林西非会议。德意志帝国在会议当中把刚果交予比利时国王利奥波
  • 城市开放空间城市开放空间(英语:urban open space),又称城市开敞空间,也简称开放空间、开敞空间,系城市规划及法律用语,其定义为于建筑基地内留设可连通道路并供公众通行或休憩之空间,近似于日本
  • 伦弗鲁伦弗鲁郡(英语:Renfrewshire;苏格兰盖尔语:Siorrachd Rinn Friù),是英国苏格兰32个一级行政区之一。虽然面积很小,但是地处苏格兰第一大城市格拉斯哥西南,人口密集,交通繁忙。面积26
  • 中华民国对外贸易发展协会台湾贸易中心/办事处坐标:25°2′3.23″N 121°33′31.75″E / 25.0342306°N 121.5588194°E / 25.0342306; 121.5588194中华民国对外贸易发展协会(Taiwan External Trade Development Council,简
  • 东宫御所坐标:35°40′35″N 139°43′27″E / 35.67639°N 139.72417°E / 35.67639; 139.72417东宫御所(日语:東宮御所/とうぐうごしょ  */?)是日本皇太子的居所。在日本传统中,东宫是
  • 亚硝酰硝酸钌亚硝酰硝酸钌是一种无机化合物,化学式为Ru(NO)(NO3)3。它可用于制备Ru/C材料。亚硝酰硝酸钌在水中会发生水解,在配制溶液时应加少量稀硝酸酸化。三氯化钌水合物和亚硝酸钠在盐
  • 2002年国际足联世界杯决赛圈赛程纪录第十七届世界杯足球赛,于2002年5月31日至6月30日,在韩国和日本举行。决赛中,巴西2比0击败德国,第5次夺得世界杯冠军。黑马球队土耳其以3比2的比分击败了东道主之一的韩国,夺得了
  • 卡内皮乡坐标:57°59′8″N 26°45′34″E / 57.98556°N 26.75944°E / 57.98556; 26.75944 卡内皮乡(爱沙尼亚语:Kanepi vald),是爱沙尼亚的一个乡,位于该国东南部,由珀尔瓦县负责管辖,首
  • 周期雍周期雍(1479年-1551年),字汝和,江西承宣布政使司南昌府宁县(今江西省九江市修水县)人,明朝刑部尚书、同进士出身。正德三年(1508年),登进士,授南京监察御史。刘瑾伏诛后,当年刘瑾罢黜的官