旷视科技Java面试题及参考答案
讲一下进程间的通讯方式(如管道、消息队列、共享内存、Socket 等),各有什么特点?
管道(Pipe)
管道是最早出现的进程间通信方式之一,主要用于具有亲缘关系(父子进程)的进程之间通信。
- 特点:
- 半双工通信,数据只能单向流动。例如,在一个简单的父子进程通信场景中,父进程向管道写入数据,子进程从管道读取数据,反过来则不行,若要实现双向通信,需要建立两个管道。
- 管道的容量有限,它是一个固定大小的缓冲区。当管道满时,写入操作会被阻塞;当管道空时,读取操作会被阻塞。这意味着如果写入进程写入速度过快,超过了读取进程的读取速度,写入进程就会等待缓冲区有空间后才能继续写入。
- 管道的生命周期和创建它的进程相关。通常,管道在创建它的进程结束后就会被销毁。例如,当父进程结束时,管道也会随之关闭,子进程如果还尝试从管道读取数据就会收到错误信号。
消息队列(Message Queue)
消息队列是一种在系统