面试之------进程间通信(IPC)整理

转载自 : [https://blog.csdn.net/wh_sjc/article/details/70283843]

进程间的五种通信方式介绍

  • 1. 管道
  • 2. FiFO(有名管道)
  • 3. 消息队列
  • 4. 信号量
  • 5. 共享内存

1. 管道

管道,通常指无名管道。
① 半双工的,具有固定的读端和写端;
② 只能用于具有亲属关系的进程之间的通信;
③ 可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write函数。但是它不是普通的文件,并不属于其他任何文件系统,只能用于内存中。
④ Int pipe(int fd[2]);当一个管道建立时,会创建两个文件文件描述符,要关闭管道只需将这两个文件描述符关闭即可。

2. FiFO(有名管道)

① FIFO可以再无关的进程之间交换数据,与无名管道不同;
② FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中;
③ Int mkfifo(const char* pathname,mode_t mode);

3. 消息队列

① 消息队列,是消息的连接表,存放在内核中。一个消息队列由一个标识符来标识;
② 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级;
③ 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除;
④ 消息队列可以实现消息的随机查询

4. 信号量

① 信号量是一个计数器,信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据;
② 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存;
③ 信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作;

5. 共享内存

① 共享内存,指两个或多个进程共享一个给定的存储区;
② 共享内存是最快的一种进程通信方式,因为进程是直接对内存进行存取;
③ 因为多个进程可以同时操作,所以需要进行同步;
④ 信号量+共享内存通常结合在一起使用。

你可能感兴趣的:(2020秋招面试)