消息队列

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

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

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

相关

  • 孤独星球孤独星球出版社(英语:Lonely Planet Publications,简称:Lonely Planet,缩写:英语:LP)被认为是世界最大的私人旅游指南出版社,由托尼·韦勒(Tony Wheeler、Maureen Wheeler)夫妇于1972年
  • 曲艺音乐 · 舞蹈 · 戏剧 (戏曲 · 话剧 · 歌剧 · 音乐剧 · 芭蕾舞剧)曲艺  · 杂技 · 魔术 · 木偶戏 · 默剧 · 公共演说戏剧 · 悲剧 · 喜剧
  • 阳西县阳西县是中国广东省阳江市下辖的一个县。2011年,阳西生产总值为102.55亿元,人均生产总值22438元,地方公共财政预算收入2.86亿元。下辖8个镇:织
  • 塞勒姆 (俄勒冈州)塞勒姆 (英语:Salem)是美国俄勒冈州州府、马里昂县县治。位于该州西北部、威拉米特河畔。此地人口约15万,是仅次于波特兰的第二大城市,与周边的凯泽尔、伍德伯恩及达拉斯一起形成
  • 弗兰克·蒙塔诺弗兰克·蒙塔诺(英语:Frank A. Montaño)是一位美国重录音混音师(英语:re-recording mixer)。他曾9次提名奥斯卡最佳音响效果奖。自1987年起他参与了近145部电影的制作。
  • 茨城县第5区茨城县第5区是日本众议院的选区,设立于1994年。北海道 13 | 山形县 4 | 静冈县 9 | 岛根县 3 | 大分县 4福井县 3 | 山梨县 3 | 德岛县 3 | 高知县 3 | 佐贺县 3青森县 4 |
  • 桑克李树权(1967年-),笔名桑克,中国当代诗人,出生于黑龙江省密山市8511农场,现在居住在哈尔滨市。桑克自幼受母亲影响热爱诗歌,1985年考入北京师范大学,1989年毕业。其诗歌作品在国内外多
  • 尤金·斯卢茨基尤金·斯卢茨基 (英文:Evgeny "Eugen" Evgenievich Slutsky;俄文: Евге́ний Евге́ньевич Слу́цкий; 1880年4月7日至1948年3月10日)是一名俄罗斯统计
  • 天主教立陶宛军中教长区天主教立陶宛军中教长区(拉丁语:Ordinariatus Militaris Lituaniae、立陶宛语:Lietuvos kariuomenes ordinariatas)是立陶宛一个罗马天主教军中教长区,直属圣座,负责牧养信奉天主
  • 安徽省人民代表大会  民主党派 (69)   人民群众 (33)   民主党派 ()   人民群众 ()安徽省人民代表大会(简称安徽省人大)是安徽省的省级地方国家权力机关。现省人大代表任期为5年,其常设机构