进程间通信的几种实现方式

在系统中,随着我们的进程越来越多,难免不同进程之间要互相传输一些数据,那么这个时候该怎么办呢?

下面主要简单了解一下,进程间通信(InterProcess Communication,IPC)的几种实现方式!

1、管道模型

管道模型与软件生命周期模型——瀑布模型(Waterfall Model)很相似。

所谓的瀑布模型,其实就是将整个软件开发过程分成多个阶段,往往是上一个阶段完全做完,才将输出结果交给下一个阶段。

还记得咱们最初学 Linux 命令的时候,有下面这样一行命令:

ps -ef | grep 关键字 | awk '{print $2}' | xargs kill -9
这里面的竖线“|”就是一个管道。它会将前一个命令的输出,作为后一个命令的输入。

从管道的这个名称可以看出来,管道是一种单向传输数据的机制,它其实是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信,我们需要创建两个管道才行。

管道又可以分为匿名管道和命名管道!

1.1 匿名管道

如上命令:

ps -ef | grep 关键字 | awk '{print $2}' | xargs kill -9

匿名管道:用"|” 表示的管道,意思就是这个类型的管道没有名字,用完了就销毁了。竖线代表的管道随着命令的执行自动创建、自动销毁。用户甚至都不知道自己在用管道这种技术,就已经解决了问题。

1.2 命名管道

命名管道,这个类型的管道需要通过mkfifo命令显式地创建。

mkfifo donge#建立一个管道

donge就是这个管道的名称。管道以文件的形式存在,这也符合 Linux 里面一切皆文件的原则。

下面我们看一下文件类型

ls -l
prw-rw-r-- 1 dong dong     0 Sep 28 17:09 donge

可以看到,这个文件的类型是p,就是pipe的意思。

往管道中写入数据

echo "hello world" > donge

这个时候,管道里面的内容没有被读出,这个命令就是停在这里的,即进程被堵塞。

这说明当一个项目组要把它的输出交接给另一个项目组做输入,当没有交接完毕的时候,前一个项目组是不能撒手不管的。

重新打开一个终端,读出管道数据

cat < hello 
hello world

一方面,我们能够看到,管道里面的内容被读取出来,打印到了终端上;

另一方面,echo 那个命令正常退出了,也即交接完毕,前一个项目组就完成了使命,可以解散了。

管道通信,我们可以看出,瀑布模型的开发流程效率比较低下,因为团队之间无法频繁地沟通。而且,管道的使用模式,也不适合进程间频繁的交换数据

2、消息队列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值