【操作系统入门到成神系列 十】进程间的通信方式_苹果手机能时时显示网速吗

  • 👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,Java领域新星创作者。
  • 📝个人公众号:爱敲代码的小黄(回复 “技术书籍” 可获千本电子书籍)
  • 📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙、操作系统从入门到成神
  • 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2022计划中:以梦为马,扬帆起航,2022追梦人
文章目录

往期推荐


进程间的通信方式

在这里插入图片描述

我们的进程一般处于用户空间,如果需要通信的话,需要借助内核:
在这里插入图片描述

一、引言

本文参考 小林coding 的《图解操作系统》,也是我十分喜欢的一个公众号博主,为他打 call

老读者知道我之前再写 Kafka 的博文,为什么突然开始写操作系统的呢?

原因在于:

当我看到 Kafka 服务端的一些 IO 操作时,我发现我看不懂了,了解之后发现这里 Netty 的概念。

当我尝试了解 IO 时,我发现一些内存、磁盘的交换,搞的我焦头烂额,于是,想静下心来从头开始。

当我把 小林coding 的 《图解操作系统》看完之后,我发现对操作系统的理解更上一层楼。

用一段话,作为今天的开场白:

  • 读书的根本目的,未必是解决现实问题,它更像一场心灵的抚慰。
  • 一个喜欢读书的人,可能不会记得自己读过哪些书。
  • 但是那些看过的故事、收获的感悟、浸染过的气质,
  • 就像一颗种子,会在你的身体里慢慢发芽长大,不断提升你的认知,打开你的视野。
二、管道

管道分为匿名管道和命名管道

匿名管道:将前一个命令(ps auxf)作为后一个命令(grep mysql)的输入,匿名管道用完就销毁。

$ ps auxf | grep mysql

命名管道:也被称为 FIFO,通过 mkfifo 的方式创建

$ mkfifo myPipe

我们通过 ls -l 查看当前 myPipe 的信息。

基于一切皆文件的理念,文件的类型为 P,也就是 **pipe(管道)**的意思

$ ls -l
prw-r--r--. 1 root    root         0 Jul 17 02:45 myPipe

当我们向 myPipe 写入数据时,我们会发现命令执行之后会卡住,等待管道数据被读取:

$ echo "hello" > myPipe  // 将数据写进管道
                  // 停住了 ...

我们需要执行另外的一条命令来读取管道:

$ cat < myPipe  // 读取管道里的数据
hello

管道通信的效率极低,不适合进程间频繁的交换数据。当然,他的好处在于简单

那管道如何创建呢,背后原理是什么?

匿名管道的通信范围是存在父子关系之间的进程,因为管道没有实体,只能通过 fork 来赋值父进程的 fd 描述符

命名管道,可以在不相关的进程中相互通信。提前创建了一个类型为管道的设备文件,只要使用该文件,就可以通信。

当管道创建时,系统调用为:

int pile(int fd[2])

一个匿名管道,存在 2 个文件描述符,读端和写端

在这里插入图片描述

所谓管道,就是内核的一段缓存

  • 父进程与子进程的通信

在这里插入图片描述

  • 子进程与子进程的通信
    在这里插入图片描述
三、消息队列

简单来说:消息队列是保存在内核的消息链表A 向消息队列中发送消息,B 需要时去拉取消息。

缺点:

  • 通信不及时
  • 发送的消息大小有限制(内核中的 MSGMAXMSGMNB 定义了消息的最大长度和队列的最大长度)

另外,消息队列通信的过程中,也存在用户态向内核态之间的数据拷贝开销。

进程是用户态的,如果想要发送消息,必须 通过系统调用从用户态切换到内核态,并将数据发送至消息队列。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

img-0liEU9PR-1714446769602)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值