进程间通信方式对比

UNIX 为实现这样的进程间通信 提供了多种技术。一些技术提供同一主机上的进程间通信,其他技术可以实现主机到主机的信息交换。另外,各种技术的速度不同,所以必须选择最合适自己需求的技术。还必须进行协调(实施时间控制和排他控制)。例如,如果一个应用程序产生数据,另一个应用程序消费数据,那么当读完共享池时消费者必须停下来等待生产者。另一方面,如果消费者无法足够快地读取池,生产者必须慢下来或暂停。

表 1 总结在典型的 UNIX 系统上可用的进程间通信形式。

表 1. UNIX 中的进程间通信

正如前面提到的,每种技术满足不同的需求。假设多个进程之间的协作的复杂性大体相当,每种方法的优点和缺点如下:

  • 1、通过一般的 UNIX 文件共享数据很简单,因为它使用大家熟悉的文件操作。但是,通过文件系统共享数据很慢,因为磁盘输入和输出操作的效率远远比不上内存。另外,只通过文件读写数据很难协调。最后,在文件中保存敏感数据是不安全的,因为根用户和拥有特权的其他用户可以访问这些信息。对于只读或只写的数据,适合使用文件。
  • 2、管道和命名管道也很简单。它们在连接的两端使用两个标准的文件描述符 — 一个只执行读操作,另一个只执行写操作。但是,管道只能在父进程和子进程之间使用,不能在任意两个进程之间使用。命名管道克服了这个缺点,是在同一系统上交换数据的好方法。但是,管道和命名管道都不提供随机访问,因为它们都作为先入先出 (FIFO) 设备。
  • 3、信号无法在进程之间传输数据。一般情况下,信号应该只用于在进程之间通知异常情况。
  • 4、共享内存适合比较大的数据集,因为它使用内存,支持快速的随机访问。共享内存的实现有点儿复杂,尽管如此,对于多个进程之间的主机 协作,共享内存是不错的方法。
  • 5、套接字的功能与命名管道很相似,但是可以跨主机。本地套接字 (也称为 UNIX 套接字)只能进行本地(同一主机上的)连接。Inet 和 Inet6 套接字分别使用 IPv4 和 IPv6 协议,它们接受远程连接(也可以通过本地机器的 Internet 寻址机制接受本地连接)。网络应用程序显然应该选择套接字,比如分布式处理或 web 浏览器。所需的代码比命名管道复杂一点儿,但是模式是固定的,在任何 UNIX 网络编程书中都有介绍。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值