linux IPC (interprocess communication)

每个内核中的IPC结构(消息队列、信号量、共享存储段)都用一个非负整数的标示符加以引用。

标示符是IPC对象的内部名,为使多个进程在同一IPC对象上同一会合,需要提供一个外部名方案。因此使用了键(key),每个IPC对象都与一个键相关联,于是键是IPC对象的外部名字。

消息队列:只能在系统范围内使用,没有访问计数,如果进程创建一个消息队列,在队列中放入几则消息,然后终止,但是该消息队列及其内容是不会删除的。直到某个进程调用msgrcv或msgctl读消息或删除消息队列。

信号量:进程同步机制,信号量是一个计数器,用于多进程之间的数据对象访问。若信号量的值为正值,则说明该资源可用。进程将信号量的值减一,表示它使用了一个资源单位。创建信号量semget与赋初值semctl分开这是一个致命的弱点。即使没有进程正在使用这种机制,它们依然存在。新的应用程序中应尽量避免使用信号量。

共享存储:允许多个进程共享给定的存储区,因为数据不需要在客户进程和服务进程之间复制,所以这是最快的一种IPC。为了防止多进程之间对同一给定存储区的同步访问,通常,信号量被用来实现对共享存储的同步。

                                                                       共享存储区布局

管道:分有名和无名之分,有名管道可用在多个不相关联进程之间的通信上,无名管道只能使用在父子进程之间的通信上。有实验说明管道比消息队列快些,而且当最后一个访问管道的进程结束时,管道也就被完全删除了,建议尽量学会使用管道FIFO《unix环境高级编程》。

信号:进程之间消息的传递,用于通知接收进程某个事件已经发生

套接字:可用于相同和不同的 计算机上,实现进程之间的通信。

猜你喜欢

转载自blog.csdn.net/cindywry/article/details/85049655
今日推荐