进程同步与进程通信很容易混淆,它们的区别在于:
- 进程同步:控制多个进程按一定顺序执行;
- 进程通信:进程间传输信息;
为了能够达到进程同步的目的,需要让进程间进行通信,传输一些进程同步所需要的信息;
a.管道:用于兄弟进程或父子进程的通信
管道是通过调用pipe函数创建的,fd[0]用于读,fd[1]用于写;
- 只支持半双工通信(单向交替传输);
- 只能在父子进程或者兄弟进程中使用;
b.FIFO命名管道:去除了管道只能父子进程通信的限制
也被称为命名管道,去除了管道只能在父子进程中使用的限制。常用于客户进程和服务器进程之间传递数据。
c.消息队列:避免了FIFO的同步阻塞问题
相比较FIFO,消息队列:
- 可以独立于读写进程存在;
- 避免了FIFO的同步阻塞问题;
- 读进程可以根据消息类型有选择地接收消息,而不像FIFO那样只能默认地接收。
d.信号量:用于多线程对共享数据对象的访问
它是一个计数器,用于为多个进程提供对共享数据对象的访问;
e.共享存储:允许多个进程共享一个给定的存储区
允许多个进程共享一个给定的存储区,因为数据不需要在进程之间复制,所以这是最快的一种IPC;
f.套接字:用于不同机器间的进程通信
与其它通信机制不同,它可用于不同机器间的进程通信;