面试官:进程通信方式有哪些?我被问倒了!

面试官:看你简历上写了不少多线程、分布式相关的项目,我们来聊聊进程通信吧。你知道进程之间有哪些通信方式吗?

:进程通信?这个...我只记得管道和共享内存,其他的有点模糊了... alt

解析答案

进程通信基础概念

进程通信(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%内容,订阅专栏后可继续查看/也可单篇购买

大学四年面经(学院本) 文章被收录于专栏

大学全部面经从大一到大四,从实习、秋招、春招等等,各种岗位,中小厂,乃至大厂面经! 公粽号:程序员落叶,里面分享全部文章详情。

全部评论

相关推荐

11-03 16:44
已编辑
吉林大学 Java
小鱼再瑞幸一点:没做好准备不应该面字节的,对你的面评有影响的
查看21道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务