进程间通信方式比较

1180阅读 0评论2015-03-13 it-rocket
分类:LINUX


几种方式:

文件、管道、共享内存空间:

1.文件方式的进程通信就是通过读写同一个文件来完成共享数据。一个进程将数据写入文件,另一个进程再将数据从文件中读出。
客户端能够读取文件,且能够多个客户端同时读取,系统允许同时打开一个文件。
服务器端通过清空重写的方式对文件内容进行修改
问题:不能避免在文件尚未进行完写操作时就有进程读取文件内容,这时会造成读取的文件内容为空或者是读出文件中的部分数据。

解决方案:可以通过文件锁的方式进行控制。


2.命名管道:常规的管道只能连接相关进程,由进程创建并由最后一个进程关闭。而命名管道可以连接不相关的进程。它是个FIFO先进先出队列,即使没有进程,命名管道依然可以存在,它不依赖于进程。服务器将字节写入队列,客户端从队列头部移出字节。服务器必须重写数据。它没有竞争的问题,在没有超过管道最大长度的时候,read和write都是原子操作,先将管道清空,然后再将管道写满,在读者和写者联通之前系统内核将进程挂起。

3.共享内存段:不依赖于进程的存在而存在。共享内存段拥有权限系统来控制进程各自的访问权限。多个客户端都可以同时从内存中读数据。

问题:如果读取是在服务器向内存中写数据的时候进行的,有可能既读到旧数据又读到新数据。

解决方案:信号量机制。


比较:

1.文件和命名管道消耗操作多。

2.文件和共享内存是无连接的

3.命名管道和共享内存只能在本机中使用

4.使用共享内存和文件要比使用管道麻烦,要处理竞态

上一篇:多线程还是多进程的选择及区别
下一篇:基于linux-3.3内核的ARM异常处理之概述