趣谈 Linux 操作系统
刘超
前网易杭州研究院云计算技术部首席架构师
85459 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 72 讲
趣谈 Linux 操作系统
15
15
1.0x
00:00/00:00
登录|注册

36 | 进程间通信:遇到大项目需要项目组之间的合作才行

信号处理函数
归还资源操作
申请资源操作
初始化信号量
删除共享内存
加载共享内存
创建共享内存
接收消息
发送消息
创建消息队列
消息结构定义
命名管道
匿名管道
API调用流程
参数解析
不同通信模式的选择
信号
信号量
共享内存模型
消息队列模型
管道模型
课堂练习
总结时刻
进程间通信模式

该思维导图由 AI 生成,仅供参考

前面咱们接项目的时候,主要强调项目之间的隔离性。这是因为,我们刚开始接的都是小项目。随着我们接的项目越来越多,就难免遇到大项目,这就需要多个项目组进行合作才能完成。
两个项目组应该通过什么样的方式进行沟通与合作呢?作为老板,你应该如何设计整个流程呢?

管道模型

好在有这么多成熟的项目管理流程可以参考。最最传统的模型就是软件开发的瀑布模型(Waterfall Model)。所谓的瀑布模型,其实就是将整个软件开发过程分成多个阶段,往往是上一个阶段完全做完,才将输出结果交给下一个阶段。就像下面这张图展示的一样。
这种模型类似进程间通信的管道模型。还记得咱们最初学 Linux 命令的时候,有下面这样一行命令:
ps -ef | grep 关键字 | awk '{print $2}' | xargs kill -9
这里面的竖线“|”就是一个管道。它会将前一个命令的输出,作为后一个命令的输入。从管道的这个名称可以看出来,管道是一种单向传输数据的机制,它其实是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信,我们需要创建两个管道才行。
管道分为两种类型,“|” 表示的管道称为匿名管道意思就是这个类型的管道没有名字,用完了就销毁了。就像上面那个命令里面的一样,竖线代表的管道随着命令的执行自动创建、自动销毁。用户甚至都不知道自己在用管道这种技术,就已经解决了问题。所以这也是面试题里面经常会问的,到时候千万别说这是竖线,而要回答背后的机制,管道。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

进程间通信是计算机系统中重要的概念,本文介绍了不同的通信模式及其在实际项目中的应用。文章首先介绍了管道模型和消息队列模型,分别类比于瀑布开发和邮件通信,强调了它们的特点和适用场景。接着详细介绍了消息队列的创建、发送和接收过程,并展示了其灵活性和适用性。此外,文章还介绍了共享内存模型和信号量的概念,以及它们在进程间通信中的作用。共享内存模型类似于多个项目组共享会议室进行合作开发,可以实现多个进程之间的数据共享,而信号量则用于实现进程间的互斥与同步。最后,文章还介绍了信号的概念,用于处理异常情况下的工作模式。通过本文,读者可以了解不同的进程间通信模式及其在实际项目中的应用,有助于读者选择合适的通信模式并理解其原理。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(31)

  • 最新
  • 精选
  • 恩言
    正在刷第二遍的趣谈网络协议,也不知道为什么有一种冲动要表达一下自己的想法,虽然趣谈网络协议已经过去了很长时间,但在刷第二遍的时候从整个结构上看真的是太清晰了,层层的递进,感觉非常的棒。这次的操作系统这个系列我觉得也值得刷N遍,每次应该都会有不同的认识。

    作者回复: 想刷就刷呀,刷的漂亮

    2019-06-19
    17
  • WB
    进程间还可以利用socket通信

    作者回复: 对的对的,还有sock文件

    2019-06-19
    13
  • W.jyao
    老师有没有考虑过出网络编程专栏。期待

    作者回复: 还没有

    2019-06-21
    2
    10
  • Geek_60f4a1
    白用那么多年Linux了,看了一点我都感觉惊呆了

    作者回复: 加油

    2019-07-06
    4
  • 安排
    socket估计要单独开一节

    作者回复: 是的

    2019-06-19
    4
  • 莫名
    mkfifo hello 觉得专栏里面的命名有点业余,这里举个例子,其他地方也有类似情况。

    作者回复: 哈哈,如果专栏也讲代码命名规则,也太严肃了吧

    2019-06-25
    2
    3
  • 尚墨
    Python 线程使用系统原生线程指的就是这里吧。我之前写过 Python 多线程下载的脚本,用到了信号量,队列。

    作者回复: 赞

    2019-06-26
    1
  • 大王叫我来巡山
    我最想看的阻塞非阻塞,同步异步一直还没有看到

    作者回复: 您指的具体是?

    2019-06-24
    1
  • LiYanbin
    "消息队列其实很少使用,因为有太多的用户级别的消息队列,功能更强大" 刘超刘老师好,做后台服务器开发,有多个业务线程,我们都是用消息队列来通信,请问这边的很少使用更具体是因为什么原因呢?哪些应用场景下的哪些功能不足所以才导致需要用到更强大的用户级别的消息队列呢?

    作者回复: 你用的不是内核提供的消息队列吧

    2020-04-20
    2
  • 眭东亮
    老师,./send -i 32768 -t 123 -m "helllo world"中 38267是消息队列的id ,但消息类型123是在哪里定义的?为什么输入“./send -i 0 -t wus33e -m "hello”结果显示:fail to send message.: Invalid argument

    作者回复: t是客户端和服务端约定好的,类型是long,数值随意,只要约定好就行

    2019-07-11
收起评论
显示
设置
留言
31
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部