当前位置: 首页 > linux, 操作系统 > 正文

LINUX 系统进程间通信IPC总结

关键字:
1 星2 星3 星4 星5 星 (1 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

Linux下的进程通信IPC基本上是从Unix平台继承而来,而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口的进程间通信机制。而Linux则把两者都继承了下来,于是形成了今天我们常用的进程间通信方法。

名称	说明	范围	用途
文件	在典型的 UNIX 文件中读写数据。任意数量的进程都可以互操作。	本地	共享大数据集,有应用层进行数据完整性保证
 
管道	使用专用的文件描述符在两个进程之间传输数据。通信只在父进程
        和子进程之间进行。命名管道可以在同一主机上的任意两个对等进
        程之间进行。	                                        本地	简单的数据共享,比如生产者和消费者
消息	消息队列是消息的链接表,有足够权限的进程可以向队列中添加
队列     消息,被赋予读权限的进程则可以读走队列中的消息。	        本地	消息队列克服了信号承载信息量少,管
                                                                        道只能承载无格式字节流以及缓冲区大小
                                                                        受限等缺点
信号	通过中断通知应用程序某一情况以及进行同步的一种方式。	        本地	无法在信号中传输数据
 
共享	通过在同一内存段中读写数据共享信息。	                        本地	任何类型的协作,尤其适合需要安全性的情况
内存
 
套接	完成特殊的设置过程之后,使用一般的输入/输出操作传输数据。	本地     FTP、ssh 和 
字                                                              或远程    Apache Web Server 等网络服务

 每种方法的优点和缺点如下:

 1.通过一般的 UNIX 文件共享数据很简单,但是通过文件系统共享数据无法避免磁盘IO请求。另外,通过文件读写数据需要应用层保证数据的完整性。最后,在文件中保存敏感数据是不安全的,因为根用户和拥有特权的其他用户可以访问这些信息。

 2.管道只能在父进程和子进程之间使用,不能在任意两个进程之间使用。命名管道克服了这个缺点,是在同一系统上交换数据的好方法。但是,管道和命名管道都不提供随机访问,因为它们都作为先入先出设备。信号无法在进程之间传输数据。

 3. 消息队列部分解决了管道承载数据量小而且内存受限的问题,但也只适用于单台主机的进程间通信,通过消息队列可以实现阻塞调用和非阻塞调用。

 4.共享内存适合比较大的数据集(比如上百G的文件),因为它使用内存支持快速的随机访问。当多进程间共享词典等类型的只读大文件数据时不愧为一种很好方法。

 5.套接字的功能与命名管道很相似,但是不受本地进程的限制,可以跨主机通过网络进行数据交换,从单机向多机迁移十分方便,因此具有很好的可扩展能力。

更详细的资料请移步:

UNIX  IPC: http://www.ibm.com/developerworks/cn/aix/library/au-spunix_sharedmemory/index.html?ca=drs-

LINUX IPC: http://www.ibm.com/developerworks/cn/linux/l-ipc/

本文固定链接: http://www.chepoo.com/linux-ipc-overview.html | IT技术精华网

LINUX 系统进程间通信IPC总结:等您坐沙发呢!

发表评论