1 管道

学习软件工程规范的时候,我们知道瀑布模型,在整个项目开发过程分为多个阶段,上一阶段的输出作为下一阶段的输入。各个阶段的具体内容如下图所示

最初我们在学习Linux基本命令使用的时候,我们经常通过多个命令的组合来完成我们的需求。比如说我们想知道如何查看进程或者端口是否在使用,会使用下面的这条命令

这里的"|"实际上就是管道的意思。"|"前面部分作为"|"后面的输入,很明显是单向的传输,这样的管道我们叫做"匿名管道",自行创建和销毁。既然有匿名管道,应该就有带名字的管道"命名管道"。如果你想双向传输,可以考虑使用两个管道拼接即可。

创建命名管道的方式

test即为管道的名称,在Linux中一切皆文件,管道也是以文件的方式存在,咋们可以使用ls -l 查看下文件的属性,它会"p"标识。

下面我们向管道写入内容

echo "666" > test

此时按道理来说咋们已经将内容写入了test,没有直接输出是因为我们需要开启另一个终端进行输出(可以理解为暂存管道)

cat < test

ok,我们发现管道内容被读出来,同时echo退出。那么管道这种通信方式有什么缺点?我们知道瀑布模型的软件开发模式是非常低下的,同理采用管道进行通信的效率也很低,因为假设现在有AB两个进程,A进程将数据写入管道,B进程需要等待A进程将信息写完以后才能读出来,所以这种方案不适合频繁的通信。那优点是什么?

最明显的优点就是简单,我们平时经常使用以致于都不知道这是管道。鉴于上面的缺点,我们怎么去弥补呢?接着往下看

2 消息队列

管道通信属于一股脑的输入,能不能稍微温柔点有规矩点的发送消息?

答:可以的。消息队列在发送数据的时候,按照一个个独立单元(消息体)进行发送,其中每个消息体规定大小块,同时发送方和接收方约定好消息类型或者正文的格式。

在管道中,其大小受限且只能承载无格式字节流的方式,而消息队列允许不同进程以消息队列的形式发送给任意的进程。

但是当发送到消息队列的数据太大,需要拷贝的时间也就越多,所以还有其他的方式?继续看

3 共享内存

使用消息队列可以达到不错的效果,但是如果我们两个部门需要交换比较大的数据的时候,一发一收还是不能及时的感知数据。能不能更好的办法,双方能很快的分享内容数据,答:有的,共享内存

我们知道每个进程都有自己的虚拟内存空间,不同的进程映射到不同的物理内存空间。那么我们可不可以申请一块虚拟地址空间,不同进程通过这块虚拟地址空间映射到相同的屋里地址空间呢?这样不同进程就可以及时的感知进程都干了啥,就不需要再拷贝来拷贝去。

我们可以通过shmget创建一份共享内存,并可以通过ipcs命令查看我们创建的共享内存。此时如果一个进程需要访问这段内存,需要将这个内存加载到自己虚拟地址空间的一个位置,让内核给它一个合法地址。使用完毕接触板顶并删除内存对象。

那么问题来了,这么多进程都共享这块内存,如果同时都往里面写内容,难免会出现冲突的现象,比如A进程写了数字5,B进程同样的地址写了6就直接给覆盖了,这样就不友好了,怎么办?继续往下看

4 信号量

为了防止冲突,我们得有个约束或者说一种保护机制。使得同一份共享的资源只能一个进程使用,这里就出现了信号量机制。

信号量实际上是一个计数器,这里需要注意下,信号量主要实现进程之间的同步和互斥,而不是存储通信内容。

信号量定义了两种操作,p操作和v操作,p操作为申请资源,会将数值减去M,表示这部分被他使用了,其他进程暂时不能用。v操作是归还资源操作,告知归还了资源可以用这部分。

5 信号

从管道----消息队列-共享内存/信号量,有需要等待的管道机制,共享内存空间的进程通信方式,还有一种特殊的方式--信号

我们或许听说过运维或者部分开发需要7 * 24小时值守(项目需要上线的时候),当然也有各种监管,告警系统,一旦出现系统资源紧张等问题就会告知开发或运维人员,对应到操作系统中,这就是信号。

在操作系统中,不同信号用不同的值表示,每个信号设置相应的函数,一旦进程发送某一个信号给另一个进程,另一进程将执行相应的函数进行处理。也就是说先把可能出现的异常等问题准备好,一旦信号产生就执行相应的逻辑即可。

6 套接字

上面的几种方式都是单机情况下多个进程的通信方式,如果我想和相隔几千里的小姐姐通信怎么办?

这就需要套接字socket了。其实这玩意随处可见,我们平时的聊天,我们天天请求浏览器给予的响应等,都是这老铁。

7 总结

分享了一下几种进程间通信方式,希望大家能知其然并知其所以然,机械式的记忆容易忘记哦。

  • 管道

  • 消息队列

  • 共享内存

  • 信号量

  • 信号

  • 套接字

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了相关推荐

  1. 两个不同的进程 虚拟地址相同_记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了...

    1 管道 学习软件工程规范的时候,我们知道瀑布模型,在整个项目开发过程分为多个阶段,上一阶段的输出作为下一阶段的输入.各个阶段的具体内容如下图所示 最初我们在学习Linux基本命令使用的时候,我们经常 ...

  2. 两边双虚线是什么意思_单黄线和双黄线有什么不同?很多人都记不对,被扣分都不知道...

    现在的社会发展越来越好,经济也有了很大的提升,人们也开始提升自己的生活质量.买车就成了很多人的首选,因为买车可以很大的方便人们的生活.不过即使买车,也并不是说就可以随随便便的开车上路的.现在路上的车辆 ...

  3. 这几道 Redis 面试题都不懂,怎么拿 Offer?

    转载自  这几道 Redis 面试题都不懂,怎么拿 Offer? 缓存雪崩 缓存穿透 缓存与数据库双写一致 最后 随着系统访问量的提高,复杂度的提升,响应性能成为一个重点的关注点.而缓存的使用成为一个 ...

  4. python 必备模块和包_量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二)...

    量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二) 21)如何在Python中复制对象? 要在Python中复制对象,可以尝试copy.copy()或copy.deepcop ...

  5. 2020年Linux运维面试题都不会,怎么拿Offer?

    阅读目录 1.什么是运维?什么是游戏运维? 2.在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的? 3.现在给你三百台服务器,你怎么对他们进行管理? 4.简述raid0 raid ...

  6. 随手记录第二话 -- 高并发情况下秒杀、抢红包都有哪些实现方式?

    1.何为高并发? 高并发:在短时间内涌入超量的请求 那么如果出现这几种情况,可能会导致的后果 服务宕机 商品库存,红包金额超量 2.何为高并发秒杀? 这是一个高频面试题,问题虽然简单,但是里面的细节有 ...

  7. 将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描

    下列程序的功能是:将一正整数序列{K1,K2,-,K9}重新排成一个新的序列.新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描. ...

  8. 关于win7系统中所有exe文件都被以word方式打开的解决方法

    关于win7系统中所有exe文件都被以word方式打开的解决方法 参考文章: (1)关于win7系统中所有exe文件都被以word方式打开的解决方法 (2)https://www.cnblogs.co ...

  9. 微信公众号都有哪些传播方式吸引粉丝

    微信公众号是现在很多企业都有注册的一个平台,通过这样一个平台打开移动端的市场,那要打开市场首先要懂得吸引粉丝,还要与粉丝互动,对公众号增加活跃度,这样公众号的人气才会越来越高,而在运营的过程中也是有很 ...

最新文章

  1. 【c语言】蓝桥杯算法提高 3-2求存款
  2. matlab 生成连续信号,Matlab的连续信号生成及时频域分析
  3. linux内存源码分析 - 内存池
  4. Shiro实现登录功能
  5. 基于opencv的人脸识别
  6. 见证“开放式多路供水”的技术难度应大于人类上天!
  7. 华为2022硬件工程师招聘全程经验
  8. 如何用TortoiseSVN将项目代码提交到SVN
  9. Android fragment中广告图片轮播效果的实现(附图 )
  10. 华为手机微信无法连接到服务器1-500,Wi-Fi 6 路由器买不起?华为新品路由 500 元不到就能买...
  11. VS 编译出现,LNK2005 连接错误解决办法
  12. HC110110019 FTP原理与配置
  13. 【kerberos】kinit: Credential cache directory “/run/user/0/krb5cc“ does not exist while getting
  14. 叼丝装备之服装必备----111111111111111111111111111111111
  15. 40原一脸嫌弃C96画册_柳岩去相亲,男嘉宾却让郑爽嫌弃摇头,耿直言行有点不礼貌...
  16. opengl 投影矩阵和深度测试
  17. sql优化之:批量处理和分批处理
  18. 腾讯文档多人在线编辑表格协议分析
  19. 安卓学习专栏——安卓报错android.support.v4.widget.SwipeRefreshLayout飘红
  20. DEA入门必备软件推荐--DEARUN

热门文章

  1. cvc降噪和主动降噪_小米降噪项圈蓝牙耳机来了:Hybrid主动降噪技术
  2. php正则学习,php中正则表达式的学习及应用
  3. eslint 换行_ESLint代码风格检测
  4. 计算机系数据结构03年试题答案,03年北京文考“数据结构”试题
  5. java url 传值乱码问题_java页面url传值中文乱码怎么办
  6. 求正整数N(N1)的质因数的个数,相同的质因数需要重复计算(java)
  7. Shell shift的使用方法
  8. C/C++面试题—旋转数组的最小数字
  9. [NOI2015]寿司晚宴(状压dp)
  10. C++网易云课堂开发工程师-拷贝构造,拷贝复制,析构函数