消息邮箱和消息队列

2023-05-16

邮箱是一个通过在系统共享存储区内传递消息来实现同步和通信的对象。

每个邮箱包含一个用于发送消息的消息队列和一个用来接受消息的消息队列。由于是在共享存储区域,因此它对每个任务都是可见的。

而一般的消息队列,还可用来处理任务与外部事件之间的通信。比如一个按键消息。然后其中一个任务可以在消息队列中尝试去获取消息。消息的分发可以由一个线程对立进行,或是通过事件处理例程进行发派。

总的来说,邮箱的空间开销比一般的消息队列要大(每个邮箱包含两个消息队列),不过由于是共享的,因此任务之间的消息同步可以通过邮箱进行。而传统的消息队列除了在任务之间进行消息传递之外,还可以让事件处理例程进行消息发派。每个任务可以有一个私有的消息队列,然后该任务可以通过将自己队列的地址进行注册,告诉给系统;或者传递给其它任务。另外,传统的消息队列中的消息的长度可以是不定长的。而由于邮箱定义在全局共享区,一般每个邮箱的大小及规格是固定的。

它们的共同点是,如果某个任务去接受消息,但失败,那么它就会处于等待状态。这时也可以结合事件进行唤醒触发,不过系统或另一个任务向它发送消息后会自动将其唤醒。


邮箱在数据结构上是一个双队列。一端由发送方发送消息,然后由系统在某一时刻将发送队列中的消息移入接收消息队列。
这就好比你写封信给你的一个朋友,你先是把信塞进邮筒,然后由邮局将邮筒的信件做统一批处理,最后分发给每户人家。这里其实也差不多,只不过这里没有邮递员和邮局的处理,而是发送者直接将信件发送到接收者家的邮箱中。

对于一份邮件,它包含了消息ID,发送者以及接收者(就像你写信,要写发信人和收信人地址一样)以及消息内容(通常是一个void*指针)。在你投信出去时,系统可能并不会马上将发送的的信转到接收队列,而且发送方一次可以发多个信件,因此这个动作可能在特定事件下,如:调度、定时器超时等,或者是在DSR(延迟的中断服务例程)中进行处理。
然后接收者就可以在指定的邮箱中等待接收信件了。

像楼上的xiaopoy(10楼)和xxgamexx(8楼)都说的不错。邮箱的特点是可以批传输消息,也就是说一次可以发多份消息,或者是在很短的时间间隔内连续发送消息。对于某些需要批消息处理的可以使用邮箱机制。

这里举个例子,比如说我们在玩PC时会有几个按键同时按下的情况(如:Alt+Delete+Ctrl)。这时可以利用邮箱来判断在某段时间内,有哪几个按键被同时按下。当按键扫描线程在扫到一个按键被按下时,立即将它放入邮箱,然后再扫,直到这段时间片被用完,系统将这些键值全都放入到邮箱的接收消息队列。然后在应用程序端可以通过邮箱接收到0个或多个键值的组合来作出不同的事件处理。


一般邮箱可能被做成单工的,也就是说对于一个邮箱,发送者不能逆转为接收者。然后,发送者和接收者都知道所创建邮箱的地址。

而对于消息队列,它的伸缩性比邮箱更强,可以做成各种形式的。对于一个消息一定有消息接收者的地址,系统将某个消息发送给接收者时,如果此时接收者处于阻塞状态,那么可以将其唤醒。而邮箱一般不是通过单个消息将接收者唤醒的,而是邮箱本身,即当系统将某个邮箱的发送队列中的消息送往接收队列之后,做唤醒操作。所以从实时性上看,消息队列应该比邮箱反应更快。不过,邮箱却可以捕获更多的实时内容。因为做一次唤醒,然后任务切换的消耗可能是比较大的。


摘自:http://bbs.csdn.net/topics/290026540

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

消息邮箱和消息队列 的相关文章

  • 浅析 耦合 紧耦合 松耦合 解耦

    耦合 指模块之间的依赖关系 xff0c 包括控制关系 调用关系 数据传递关系 模块间联系越多 xff0c 其耦合性越强 xff0c 同时表明其独立性越差 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准 划分模块的一个准则就是高内聚
  • 机器人视觉项目:视觉检测识别+机器人跟随(1)

    更新一波暑假做的机器人视觉检测跟随的项目 xff0c 有一些笔记都放在博客中 xff0c 有需要的可以交流 项目的目的是在机器人上搭建视觉检测系统 xff0c Kinect 43 ros 43 深度学习目标检测 43 行人识别 xff08
  • 机器人视觉项目:视觉检测识别+机器人跟随(17)

    参考一个实例行人检测 在ubuntu 43 ros环境下 xff0c 利用RGBD采集数据给小车 xff0c 实现行人跟随 原作者开源的例子是出现一个窗口 xff0c 用鼠标选择一个区域做kcf跟随 xff0c 选择的物体不受限制 xff0
  • UNIX系统中进程由哪三部分组成

    在UNIX系统中进程由以下三部分组成 xff1a 进程控制块PCB xff1b 数据段 xff1b 正文段 UNIX系统为了节省进程控制块所占的内存空间 xff0c 把每个进程控制块分成两部分 一部分常驻内存 xff0c 不管进程是否正占有
  • MAVLink.io(4)--MAVLlink Version

    MAVLink Version 版本 MAVLink发展处几个版本 xff1a MAVLink 2 0 目前推荐的主要版本 xff0c 2017被大部分用户接受 MAVLink v1 0 2013年被广泛接受 xff0c 一直被大批设备采用
  • sourceTree使用教程详解

    SourceTree是最好用的版本管理客户端软件 xff0c 没有之一 本人将以连载经验的形式来详细讲述如何利用sourceTree去进行代码或文件的版本管理 教程一将讲述 克隆 xff0c 提交 xff0c 和推送 一 SourceTre
  • Flex的危局,还是HTML5的盛宴?

    为InfoQ的RIA迷你书写序 xff0c 似乎是我的宿命 由于工作原因把这个任务推迟了一段时间之后 xff0c 后果居然是不仅写了序 xff0c 还成为了另一篇序的译者 互联网10年 xff0c 始于2000年 对于互联网来说 xff0c
  • git pull 覆盖本地代码

    在使用Git的过程中 xff0c 有些时候我们只想要git服务器中的最新版本的项目 xff0c 对于本地的项目中修改不做任何理会 xff0c 就需要用到Git pull的强制覆盖 xff0c 具体代码如下 xff1a git fetch a
  • leetcode题解日练--2016.6.17

    编程新手 xff0c 尽量保证每天至少3道leetcode题 xff0c 仅此记录学习的一些题目答案与思路 xff0c 尽量用多种思路来分析解决问题 xff0c 不足之处还望指出 今日题目 xff1a 1 罗马数字转整数 xff1b 2 找
  • ROS环境安装与配置

    第1周作业 文章目录 前言一 ROS是什么 xff1f 二 Ubuntu上安装ROS三 小海龟运动总结参考 前言 VMware Workstation 15 5 Ubuntu 18 04 6 Ros Melodic Morenia 一 RO
  • 树莓派操作及搭建frp实现内网穿透

    买了个树莓派4b xff0c 折腾玩玩 一 安装 安装方法都一样 xff0c 下载镜像 xff0c 烧录到内存卡 xff0c 将内存卡插入树莓派 xff0c 启动即可 我试过的有ubuntu xff0c centos8 xff0c 树莓派官
  • MSF学习之旅之初识MSF

    0x00 前言 emmmm刚接触Metasploit还有点懵 xff0c 记录一下学习过程 参考了 Metasploit渗透测试指南 一书 0x01 启动MSF终端 Kali无需安装 xff0c 自带 两种方法 xff1a 方法一 xff1
  • 记一次Nginx服务器CPU100%故障

    描述 周五请假外出 xff0c 突然收到监控报警提示Nginx服务器的CPU使用率100 xff0c 另外用户也反应服务不可用 xff0c 同事登录服务器后发现Nginx的进程的CPU使用率100 xff0c 且后端应用有大量的服务调用网络
  • 嵌入式软件开发的难点

    软件开发本身就存在自由度大 关联性高的问题 嵌入式软件除了继承软件开发的难点之外 xff0c 在如下方面有自身的 独特的难点 xff1a 1 xff0c 内存有限 xff0c 螺蛳壳里做道场 xff1b 2 xff0c 处理能力有限 xff
  • FreeRTOS怎么定义systick中断处理?

    1 xff0c 在FreeRTOSConfig h里 xff0c 定义如下 xff1a define xPortSysTickHandler SysTick Handler 2 xff0c 在启动代码里 xff08 s或者 asm xff0
  • 开关中断与cpsid/cpsie指令

    在汇编代码中 xff0c CPSID CPSIE 用于快速的开关中断 xfeff xfeff CPSID I PRIMASK 61 1 xff0c 关中断 CPSIE I PRIMASK 61 0 xff0c 开中断 CPSID CPSIE
  • 通过安装VNC服务器x11vnc(或vnc4server)和配置x11vnc.service实现远程通过VNC-Viewer访问VNC服务器。

    1 Xshell的下载 xff1a 通过Xshell官网 xff08 链接 xff1a XShell 下载 softonic com xff09 下载Xshell 图 2 Xshell的下载 下载完成后安装 xff0c 安装成功后打开Xsh
  • 移动互联网,浮华还是盛宴—— 2011年中国移动开发者大会

    参会第一天 2011年11月3日早晨 xff0c 把女儿送到幼儿园之后 xff0c 驱车直奔移动开发者大会现场 虽然北京的堵车一如既往 xff0c 不过这次大会安排在了国家会议中心 xff0c 这是北京为数不多的在早晚高峰不堵车的地方 xf
  • 汇编LDMIA ,STMDB指令等

    LDMIA 中的 I 是bai increase 的缩写 xff0c A 是 after 的缩小 xff0c LD加载 load 的意思 R1后面的感叹du号 xff01 表示会自动调节 R1里面zhi存的指dao针 所以整句话意思是任务栈

随机推荐

  • 到底什么是模型预测控制MPC(一)

    1 为什么使用MPC控制 在浏览文章的时候 xff0c 很多文章都是基于MPC来做的 那么究竟什么是模型预测呢 xff1f 模型预测也可以说是一种我们熟悉的反馈控制算法 xff0c 其目的就是预测出未来的输出 以一个生活中的例子引入 xff
  • Linux访问报Input/output error处理步骤一例

    背景 xff1a redhat7 4版本操作系统 xff0c 收到磁盘告警 更换磁盘后检查系统 xff0c 发现 opt无法查看内容 1 先尝试保存metadata xff0c 不行则继续下一步 如果磁盘很大 xff0c 那metadata
  • 四旋翼电池、电机、螺旋桨选型与搭配

    电池 电机 螺旋桨搭配 1 电机 1 电机KV值 xff1a 大KV配小桨 xff0c 小KV配大桨 KV值是每1V的电压下电机每分钟空转的转速 xff0c 例如KV800 在1V的电压下空转转速是800转每分钟 10V的电压下是8000转
  • jetsonNX刷机步骤

    图为T503盒子 1 取消ssd为系统盘 nbsp sudo mount nbsp dev mmcblk0p1 mnt nbsp cd mnt etc nbsp sudo rm setssdroot conf nbsp reboot 2 格
  • MT7603/MT7610/MT7612/MT7632/MT7662/RT3070 WiFi模块选型参考

    MT7603 MT7610 MT7612 MT7632 MT7662 RT3070 rt5572系列wifi模块选型参考 RT3070是2 4G单通道 xff0c 最大传输速率可以150Mbps xff0c 目前基本上是一些dongle类产
  • 联发科RT2880/RT3052/RT3883/RT5350/RT3352无线路由器wifi芯片介绍

    RT3052 SOC结合了mediaTek Ralink 的802 11n草案 xff0c 兼容2T2R MAC BBP RF 高性能的384MHz MIPS24KEc CPU内核 5端口集成10 100以太网交换机 PHY USB OTG
  • MT7628处理器介绍,MT7628芯片原理图资料

    MT7628处理器 xff1a MT7628芯片上路由器包括802 11n MAC和基带 2 4GHz无线电和FEM 575 580 MHz MIPS 24KCPU核 5端口10 100快速以太网交换机 MT7628包括所有需要的东西 从单
  • MT7628 wifi模块,MTK路由器芯片介绍

    MT7628处理器 xff1a MT7628nn mt7628an 系列产品是新一代2T2R 802 11n Wi Fi AP 路由器 系统单芯片 MT7628可提升射频效能表现 减低功耗 xff0c 并将整体物料清单 BOM 成本优化 x
  • MT7621A路由器芯片参数/处理器资料(原理图/CPB)介绍

    MT7621A支持高级别AP 路由器的要求 xff0c 以及大量的接口以及巨大的最大RAM容量 feature MT7621A CPU MIPS1004Kc 880 MHz I Cache D Cache 32 KB 32 KB L2 Ca
  • 《大数据时代》读书总结

    这本书从以下几个方面阐述了我们所处的时代是如何展现 大数据 的 xff1a 1 首先是大数据时代的思维变革 思维为什么需要变革 xff1f 怎样变革 xff1f 思维需要变革的第一个原因是 xff0c 这个时代获取和处理数据的方式更加多元
  • 联发科RT3573无线wifi路由器模块芯片介绍

    RT3573是联发科推出的一款高效能又具成本效益的802 11n WiFi 传输器 dongle 解决方案平台 RT3573是一款高度整合式WiFi单芯片 xff0c 支持450 Mbps PHY速率 它完全符合IEEE 802 11n及I
  • K8S svc暴露的服务内部调用方法

    现象 xff1a 在Kubernetes集群内业务是通过ClusterIP或者服务名访问 k8s 的ingress nginx controller存在缺陷 xff0c 只有Ingress的Pod所在节点上 xff0c Pod才能访问通过I
  • CMake构建OpenCV项目

    文章目录 前言一 基本概念二 操作步骤1 创建OpenCV程序2 创建CMake文件3 编译项目4 运行项目 总结 前言 CMake是个一个开源的跨平台自动化建构系统 xff0c 用来管理软件建置的程序 xff0c 并不依赖于某特定编译器
  • 在立创商城上快速制作PCB原理图库

    以可调降压电源芯片TPS62130为例 xff1a 1 打开立创商城 xff0c 搜索元器件 2 点击 下载文件 3 出现下图 xff0c 点击 立即使用 4 保存原理图文件 5 保存完 xff0c 导出 6 打开导出文件 7 生成原理图库
  • 串口通信(232,485,422)及一些常见问题

    本文转载自21ic电子网 xff1a https www sohu com a 197785266 464086 本人对此文章进行了优化 xff0c 如有侵权 xff0c 请联系删除 xff01 并行通信与串行通信 与串行通信相对的是并行通
  • 运维排查篇 | 大量后台进程占用CPU资源怎么办?

    目录 案例现象定位问题解决问题pstree 案例现象 今天早上打开虚拟机终端 xff0c 发现一直有进程往我的 1 txt 文件里写东西 xff0c 删除之后又重新生成 而且 1 txt 大小已经五百多M了 使用 top 命令查看一下 xf
  • VTOL-垂起4+2构型电机电调校准(小白自用

    我也是个小白 有不对的地方欢迎指出 xff0c 有啥可以在评论区讨论 目录 VTOL 垂起4 43 2构型电机电调校准 xff08 小白自用参考链接 xff0c 感谢前辈博主前期准备校准四旋翼四轴电机电调双发电调校准 一些可能会出现的问题以
  • 理解浮点数的二进制表示

    目录 二进制的科学计数法 浮点数的二进制表示 符号位 尾数和指数 xff08 以64位浮点数为例 xff09 0 规约数和非规约数 无穷大和空值NaN 二进制的科学计数法 浮点数在电脑中用二进制储存 xff0c 约定以二进制的科学计数法来进
  • 最新版 如何获取OSS配置获取AccessKeyId、AccessKeySecret

    1 首先第一步 登录阿里云官网 https www aliyun com spm 61 5176 12901015 2 0 0 3c89525ce8lmgE 2 注册账号 可以直接使用 支付宝扫码登录 自动注册完成 3 注册成功后登录 可以
  • 消息邮箱和消息队列

    邮箱是一个通过在系统共享存储区内传递消息来实现同步和通信的对象 每个邮箱包含一个用于发送消息的消息队列和一个用来接受消息的消息队列 由于是在共享存储区域 xff0c 因此它对每个任务都是可见的 而一般的消息队列 xff0c 还可用来处理任务