计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

30 |应用间通信(二):详解Linux进程IPC

你好,我是 LMOS。
上节课,我们学习了信号和管道这两种通信方法,这节课我们接着看看消息队列和共享内存这两种通信方式。在大型商业系统中,通常会把功能拆分成几大模块,模块以应用形式存在,就需要消息队列和内存共享来使模块之间进行通信和协作,这就是利用通信机制将应用解耦。
这节课的配套代码,你可以从这里下载。话不多说,我们正式开讲吧!

消息队列

消息队列是 Linux 提供的一种进程间通信方法,它能让进程之间互相发送消息。这些消息的形式由进程自己决定,可以是文本,也可以是二进制的,格式可以随意,只要另一个进程认识就行。
你可以把消息想象成一个数据记录,并且这个记录具有特定的格式以及特定的顺序。消息队列实质就是一个“收纳”消息的链表,消息会依次挂入这个叫做队列的链表中,一个链表节点就对应着一个消息。
接下来的问题就是,谁有权操作这个消息队列?答案是对这个消息队列有写权限的进程可以向其中插入新的消息;对消息队列有读权限的进程,则可以从其中读出消息。逻辑结构如下图所示:
Linux 采用消息队列来实现消息传递,新的消息总是放在队列的末尾,但接收的时候通常是从队列头开始,也可以从中间抽取。发送消息的方式可以是同步的,也可以是异步的。在同步方式的情况下,发送方在消息队列为满时,要进入等待状态。接收方在消息队列为空时,也要进入等待状态;而异步方式中,发送方和接收方都不必等待,而是直接返回。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Linux进程间通信(IPC)是实现进程之间互相发送消息的重要方法。本文详细介绍了Linux提供的消息队列和共享内存这两种通信方式。消息队列允许进程以文本或二进制形式相互发送消息,并提供了同步和异步发送消息的方式。文章还介绍了消息队列的操作步骤和相关接口函数。此外,文章还展示了如何利用消息队列机制实现一个简单的聊天软件,通过主进程和子进程之间的消息传递实现通信。接着,文章提到了Linux系统中的共享内存机制,并介绍了相关的实现细节。共享内存的实现方式使得进程之间可以直接通过修改各自虚拟地址空间中的内容完成数据的瞬间传送,从而实现高效的进程间通信。文章通过实例和代码演示了Linux进程间通信的实际应用,为读者提供了深入了解Linux IPC的机会。文章还提到了进程间通信的同步和异步方式,以及指出这些通信方式只能用于本机进程间通信,不能用于远程通信,需要使用套接字。整体而言,本文内容涵盖了Linux进程间通信的关键概念和实际应用,对于想要深入了解Linux IPC的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • peter
    请教老师一个问题: Q1:消息类型和键的数值有什么含义? 文中消息队列的代码中,“消息类型#define MSG_TYPE (041375);消息队列键#define MSG_KEY (752364)”,这两个数字有特别含义吗? 还是随机定义的?

    作者回复: 标识

    2022-10-11归属地:湖北
    2
    1
  • 范廷东
    请问老师,像rabbitMQ这类软件实现的消息队列,算是哪一种类型呢? 微服务架构中的消息总线服务算是哪一种机制呢?
    2023-10-05归属地:陕西
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部