liunx的六种进程间通信方式
管道、消息队列、共享内存、信号、套接字、信号、文件锁1、管道1、匿名管道:
概念:向内核申请固定大小的缓冲区,程序具有写入和读取的权利,一般采用fork函数实现父子进程的通信。
2、命名管道:
概念:在内核中申请固定大小的缓冲区,程序具有写入和读取的权利,无血缘关系的过程也可以进行进程间通信。
3、特点:
1、面向字节流,
2、生命周期与内核一起
3 )具有同步互斥机制。
4、半双工、单向通信,两条管道实现双向通信。
2,消息队列1,概念:在内核中创建队列。 队列中的每个元素都是一个数据报,不同的进程可以通过句柄访问该队列。
消息队列提供了一种将块数据从一个进程发送到另一个进程的方法。
每个数据块都被视为具有类型,并且接收进程接收的数据块可以具有不同类型的值
消息队列中也有管道一样的东西。 也就是说,每个消息的最大程度都有上限。 (MSGMAX )、
每个消息队列的总字节数有上限(MSGMNB ),系统上的消息队列总数也有上限(MSGMNI )
2、特点:
1 )消息队列可以视为全局链表。 链表的节点时钟存储数据报的类型和内容,并使用消息队列的标识符进行标记。
2 )消息队列允许一个或多个进程写入或读取消息。
3 )消息队列的生命周期与内核一起提供。
4、消息队列可以实现双向通信。
3,信号量1,概念
在内核中创建信号集合(本质上是数组),数组的元素(信号)全部为1,p操作为-1,v操作为1,
(1) p ) sv ) :如果sv的值大于零,则减去1; 如果值为零,则中止进程的执行。
) v ) sv ) :等待sv且其他进程挂起时,恢复运输;等待sv且没有挂起的进程时,加1。
PV操作在同一进程中使用,实现互斥。
PV操作用于不同的进程,以实现同步。
2、功能:
保护临界资源。
4,共享内存1,概念:
将同一物理内存块映射到不同进程的虚拟地址空间,在不同进程之间共享相同的资源。
共享内存是最有用的进程间通信方式,可以说是最快的IPC形式。
2、特点:
1 )无需从用户状态频繁切换或复制数据到内核状态,直接从存储器读取即可。
2 )共享内存是临界资源,需要操作时必须保证原子性。 也可以使用信号或排他锁定。
3 )生命周期与内核一起存在。
5 )生命周期与内核一起,必须手动发布,以上所有内容的总结方法才会消失。