面试官:进程通信方式有哪些?我被问倒了!
面试官:看你简历上写了不少多线程、分布式相关的项目,我们来聊聊进程通信吧。你知道进程之间有哪些通信方式吗?
我:进程通信?这个...我只记得管道和共享内存,其他的有点模糊了... 
解析答案
进程通信基础概念
进程通信(IPC,Inter-Process Communication)是指在不同进程之间传播或交换信息的技术。由于每个进程都有自己独立的地址空间,一个进程不能直接访问另一个进程的变量和数据结构,所以操作系统必须提供专门的机制来实现进程间的通信。
主要通信方式详解
1. 管道(Pipes)
管道是最古老的进程通信方式之一,它本质是一个内核缓冲区,提供单向通信能力。
特点:
- 单向通信,一端写,一端读
- 只能用于有亲缘关系的进程(如父子进程)
- 数据以字节流形式传输
- 容量有限,写满时写进程阻塞
Java示例:
// 创建管道流
PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream(pis);
// 写线程
new Thread(() -> {
try {
pos.write("Hello Pipe!".getBytes());
pos.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
// 读线程
new Thread(() -> {
try {
int data;
while ((data = pis.read()) != -1) {
System.out.print((char) data);
}
pis.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
2. 命名管道(Named Pipes)
命名管道解决了普通管道只能在亲缘进程间通信的限制,通过文件系统中的特殊文件实现。
特点:
- 有名称,可在文件系统中看到
- 允许无亲缘关系的进程通信
- 支持双向通信(某些系统)
- 通信前需要显式打开
3. 消息队列
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
大学四年面经(学院本) 文章被收录于专栏
大学全部面经从大一到大四,从实习、秋招、春招等等,各种岗位,中小厂,乃至大厂面经! 公粽号:程序员落叶,里面分享全部文章详情。
