1 概述
linux常见的五大进程间通信方式包括:共享内存、管道、消息队列、信号量、Socket。
2 共享内存
定义:将同一块物理内存映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。
特定:(1)不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以。
(2)共享内存是临界资源,所以需要操作时必须要保证原子性。使用信号量或者互斥锁都可以。
3 管道
(1)无名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,仅适用于具有共同祖先的进程间的通信。
(2)命名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,适用于任意两个进程间的通信。
4 消息队列
在内核中创建一队列,队列中每个元素是一个数据报。消息队列提供从?个进程向另?个进程发送?块数据的?法,因此不同的进程通过访问同一消息队列实现通信。
5 信号量
信号量是一种特殊的变量,用于解决进程或线程间共享资源引发的同步问题。对于信号量只允许进行+1和-1两个操作,对应的两种状态为:
(1)当信号量值等于0时,程序等待;
(2)当信号量值大于0时,信号量减1,程序继续运行。