『面试问答』:进程间通信的方式有哪些?
面试官 : 请说一下进程间通信的方式有哪些?
进程间通信的方式有管道、消息队列、共享内存、信号量、信号和套接字。
- 管道分为匿名管道和命名管道,它是一种半双工的通信方式,数据只能单向流动,管道的通信数据遵循先进先出的原则;匿名管道只能用在父子进程之间传输数据,命名管道可以在不相关进程间通信;管道这种通信方式效率低,不适合进程间频繁地交换数据。
- 消息队列是保存在内核中的消息链表,按照消息的类型进行消息传递,具有较高的可靠性和稳定性。消息队列的消息体有一个最大长度的限制,所以不适合比较大数据的传输。消息队列通信过程中,存在用户态与内核态之间的数据拷贝开销。
- 共享内存是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问;共享内存不需要陷入内核态或者系统调用,大大提高了通信的速度,是最快的进程间通信方式,但是当多进程竞争同一个共享资源时,使用共享内存会造成数据错乱的问题。
- 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,与共享内存结合起来使用,实现进程、线程的对临界区的同步及互斥访问。
- 信号是一种异步通信机制,用于通知接收进程某个事件已经发生,比如使用kill命令,就是给进程发信号。
- 套接字不仅可以用于不同主机间的进程间通信,也可以用于本地主机上的进程间通信。
软件开发面试问答 文章被收录于专栏
分享软件开发岗位面试题及答案