全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > AI人工智能 > AI通用技术 >

如何实现进程间的通信(IPC)?

时间:2017-11-29 13:33

人气:

作者:admin

标签: 通信 

导读:如何实现进程间的通信(IPC)?-1、管道( pipe ) 既可在程序中使用,也可在shell中使用。 管道是一种半双工的通信方式,数据只能单向流动。 管道的问题在于他们没有名字,只能在具有...

进程间的通信(IPC)如何实现?

1、管道( pipe )

既可在程序中使用,也可在shell中使用。

管道是一种半双工的通信方式,数据只能单向流动。

管道的问题在于他们没有名字,只能在具有亲缘关系(父子进程间)的进程间使用。

扩展:

管道由pipe函数创建,提供一个单向数据流。当需要一个双向数据流时,我们必须创建两个管道,每个方向一个。这也就是全双工管道的实现原理:由两个半双工管道构成。

2、命名管道 (named pipe) :即FIFO

命名管道也是半双工的通信方式。提供单向数据流。

克服了管道没有名字的限制,因此允许无亲缘关系的进程间通信,解决了管道的上述问题。

扩展:

管道和FIFO都是使用通常的read和write函数访问。

FIFO由mkfifo函数创建。FIFO不同于管道的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程访问同一FIFO。

FIFO的真正优势表现在服务器可以是一个长期运行的进程(如守护进程),而且与其客户可以无亲缘关系。

3、信号量( semophore )

主要作为进程间以及同一进程内不同线程之间的同步手段。

进程间通信处理同步互斥的机制。信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。

4、信号 ( sinal )

是一种处理异步事件的方式。

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。除了用于进程外,还可以发送信号给进程本身。

信号和信号量是不同的,他们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者是使用P,V操作来实现的。

5、消息队列( message queue )

消息队列是消息的链表,包括Posix消息队列systemV消息队列。

有足够权限的进程都可以向队列中添加消息,有足够读权限的进程都可以读走队列中的消息。

消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

扩展:

消息队列具有随内核的持续性,这跟管道和FIFO不一样。当一个管道或FIFO的最后一次关闭发生时,仍在该管道或FIFO上的数据将被丢弃。

两种消息队列:都不使用真正的描述符,因此在消息队列上使用select或poll是困难的。两种消息队列:在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。

SystemV消息队列的问题之一是无法通知一个进程何时在某个队列中放置了一个消息,也就是无法窥探一个消息。而Posix消息队列允许异步事件通知,以告知何时有一个消息放置到了某个空消息队列中。

Posix消息队列缺失的主要特性是从队列中读出指定优先级消息的能力。

使用管道和FIFO时,为在两个方向上交换数据,需要两个IPC通道。而使用消息队列时单个队列就够用,由每个消息的类型来标识该消息是从客户到服务器还是从服务器到客户。

Posix消息队列消息链表的链表头中含有当前队列的两个属性:队列中允许的最大消息数和每个消息的最大大小。

Posix消息队列消息队列的2个限制:一个进程能同时拥有打开着的消息队列的最大数目;任意消息的最大优先级。

6、共享内存( shared memory )

是由一个进程创建,但多个进程都可以访问的同一块内存空间。是最快的可用IPC形式(因为共享内存区中的单个数据副本对于共享该内存的所有线程或进程都是可用的)。

是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步和通信。

一般IPC形式(管道、FIFO、消息队列)的问题在于,两个进程要交换信息,这些信息必须经由内核传递。而进程间共享内存时,交换数据就不再涉及内核。这些进程必须协调或同步对该共享内存区的使用。

将共享内存区用于客户-服务器文件复制:该共享内存区同时存在于客户和服务器的地址空间。

数据只需复制两次:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。

然而其他IPC形式(管道、FIFO、消息队列)则需要四次复制:

另外,默认情况下通过fork派生的子进程并不与其父进程共享内存区。!!!

7、套接字( socket )

更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

8、远程过程调用:RPC

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信