进程通信的方式及区别
进程通信方式有5种:
1.管道:
又分匿名管道和有名管道。如果管道中的信息没有被读取,这个管道就会一直被阻塞。
匿名管道:是半双工通信(只能单向传递),只能在亲缘关系的进程之传间传递信息,不属于文件系统只存在于内存中。
有名管道(FIFO):任何进程均可以进行通信,有特定的路径名与之关联,存在于文件系统中。
2.消息队列:
它是消息的链接表,存于内核中,每个消息队列都有一个标识符ID。
其中的消息有特定的格式和优先级,接收消息可以按先进先出,也可以按消息的类型去查询;另外,消息是有一定大小限制的。
消息队列独立于发送接收进程,就是两个进程终止了,消息队列中的内容还是会留着。
3.信号量:
信号量是一个计数器,它并不能用于存储数据,而是用来进行进程同步,通常和共享内存结合使用。
它基于操作系统的PV操作,可以加减任意数值。
4.共享内存:
共享内存指两个或多个进程共享一个给定的存储区。(进程中的内存都是虚拟内存空间,可以拿出一部分映射到相同的物理空间上实现共享)
它是最快的一种IPC,进程可以直接去内存中获取数据。
共享内存需要同步,信号量就是用来同步对共享内存的访问。
还有socket等好像不是重点,先不总结了。
如何向面试官讲述进程间通信
面试必问:进程与线程的异同以及进程间通信方式