一起talk C栗子吧(第一百零三回:C语言实例--进程间通信大阅兵)

各位看官们,大家好,上一回中咱们说的是使用信号量进行进程间同步与互斥的例子,这一回咱们说的例
子是:进程间通信大阅兵。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在前面的章回中介绍了多种进程间通信的方式,大家可能觉得有点杂乱的感觉,或者有各种疑问:为什么会有这么多进程间通信方式呢?这么多通信方式中哪个最好呢?其实这么多的进程间通信方式除了历史的原因外,也与技术的发展有关系。这些通信方式中不能说哪个最好,只能说哪个最适用。具体使用哪种通信方式取决于我们的编程环境。

在本章回中,我们会以阅兵的方式对这些通信方式进行总结与比较,通过阅兵来展现他们的优点,避免它们的缺点。让大家对他们有更加深刻的认识,以便在写程序的时候选择最恰当的通信方式。

参加本次阅兵的方队来自我军海陆空三大军种,他们来自五湖四海,但是为了保家卫国而走在了一起。本次参阅的方队有信号方队,管道方队,无名管道方队(相对于命令管道FIFO而而言),命名管道方队,消息队列方队,共享内存方队,信号量方队。各方队已经就绪,随时准备接受检阅。

升旗!
奏乐!
阅兵仪式正式开始!

看官们,走在阅兵方阵最前面的是信号方队。信号方队是我军历史上最悠久的部队。该部队随着Unix系统产生而产生,为Unix系统的发展做出了卓越的贡献。在Linux系统产生后,该部队也不畏险阻,挻进Linux领域,成为该领域中进程通信的主要方式之一。信号方队为我军及时传递各种信号,使我们永远走在敌人的前面,有效地压制了敌人。

接下来出场的是管道方队。管道方队披星戴月,日夜奋战,有力地保证了进程间的正常通信。他和信号方队有互补的作用,他的产生有效地解决了信号方队只能发送信号不能传递数据的缺点。他为进程间通信输送了海量数据,堪比Linux shell中的管道。

俗话说:打仗亲兄弟,上阵父子兵。现在出场的就是好比父子兵的无名管道方队。它们属于管道这个大分支,所以和前面走过去的管道方队在服装上比较类似。无名管道部队处处做好事,处处不留名,因为他们都是活雷锋。在父子进程间通信时首选无名管道部队。

伴随着嘹亮的军歌声,我们送走了无名管道方队,迎来了命名管道方队。命名管道部队也隶属于管道这个大分支。他们有郊地扩展了战场,从无名管道只能在父子进程间通信扩展到可以在任何进程间通信。是进程中最常使用的通信方式。命名管道部队的诞生,好比装备了高科技设备部队,为我军的现代化发展做出了突出的贡献,堪称现代化部队的鼻祖。

一二三四!三大管道方队的口号声还在耳边环绕,消息队列方队已经出现在我们眼前。消息队列部队是与管道部队并列的现代化部队。消息队列部队机动灵活,能适用各种做战环境。哪里需要就去哪里,是最令敌人畏惧的部队。管道部队传送的是数据流,消息队列部队传送的是数据块,而且可以自己控制消息块的大小和包装。这就是它灵活性的体现。如果说管道部队送来的是救命水,那么消息队列部队送来就是保命粮。水是液体,类似数据流;粮食是一袋一袋的,类似于一条一条的消息。进程间通信时需要看消息的类型,可以依据消息的类型来选择进程间通信的方式,进而提高通信的效率。这比如打仗,不同战场需要不同的部队,它们是一个道理。

空中飞机翱翔,地上战车滚滚。共享内存方队乘着战车来接收检阅。共享内存方队是我军中反应最快捷的部队。他们广泛使用飞机和战车来装备部队,极大地提高了部队的作战速度。神龙见首不见尾是他们一贯的作风,如果哪天发现天降神兵了,哪肯定是共享内存部队。在我们介绍的这几种进程间通信方式中,共享内存是最快的通信方式,因为它是在进程的内存中进行通信,而且它还克服了管道单向通信的缺点。

看官们,最后出场的是信号量部队,他好比部队的神经网络,能够有效地联络和指挥各个部队进行综合做战。现代战争是综合形式的战争,有了信号量部队,我们就在现代战争中掌握了主动权。进程间通信时会涉及到多个进程,使用信号量可以保证多个进程正常通信。也就是说信号量经常用来解决进程同步与互斥相关的问题。

台下传来了阵阵的欢呼声,阅兵仪式在大家的欢呼声中正式结束!

各位看官,关于进程间通信大阅兵的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。

你可能感兴趣的:(进程间通信)