进程间通信

进程间的通信方式比较多,首先需要理解下面这几个概念:

  • 竞态条件:即两个或多个线程同时对一共享数据进行修改,从而影响程序运行的正确性时,这种就被称为竞态条件(race condition)

  • 临界区:不仅共享资源会造成竞态条件,事实上共享文件、共享内存也会造成竞态条件、那么该如何避免呢?或许一句话可以概括说明:禁止一个或多个进程在同一时刻对共享资源(包括共享内存、共享文件等)进行读写。换句话说,我们需要一种 互斥(mutual exclusion) 条件,这也就是说,如果一个进程在某种方式下使用共享变量和文件的话,除该进程之外的其他进程就禁止做这种事(访问统一资源)。

    一个好的解决方案,应该包含下面四种条件

    1. 任何时候两个进程不能同时处于临界区
    2. 不应对 CPU 的速度和数量做任何假设
    3. 位于临界区外的进程不得阻塞其他进程
    4. 不能使任何进程无限等待进入临界区

  • 忙等互斥:当一个进程在对资源进行修改时,其他进程必须进行等待,进程之间要具有互斥性,我们讨论的解决方案其实都是基于忙等互斥提出的。

进程通信(IPC,InterProcess Communication)

进程之间通讯(Inter-Process Communication, IPC)是一个进程(一个运行中的程序的实例)与另一个进程共享数据和信息的机制。操作系统提供了多种IPC机制,以适应不同场景下的需求。以下是一些常见的IPC技术:

  1. 管道(Pipes)

    • 有名管道(Named Pipes)和无名管道(Unnamed Pipes)。
    • 无名管道通常用于父子进程或兄弟进程之间的通信。
    • 有名管道则可以在任意两个进程间进行通信。
  2. 消息队列(Message Queues)

    • 允许一个或多个进程向消息队列中写入或读取消息。
    • 提供了一种异步通信机制,进程可以通信而无需实时接收数据。
  3. 信号(Signals)

    • 一种用于进程间通信的简单方式,一个进程可以发送信号给另一进程。
    • 信号可用于告知进程发生了哪些系统级事件。
  4. 共享内存(Shared Memory)

    • 允许两个或多个进程共享一个给定的存储区。
    • 是最快的IPC形式,因为数据不需要在客户进程和服务进程间复制。
  5. 信号量(Semaphores)

    • 主要用于两个目的:一是多个程序可以访问同一资源的同步;二是两个或多个进程间的通信。
  6. 套接字(Sockets)

    • 用于不同机器上的进程间通信。
    • 支持基于流和基于数据报的通信。
    • 可用于网络之间的通信,也可用于同一机器上的进程间通信。
  7. 文件映射(Memory-mapped files)

    • 允许进程创建一个文件的内存映射部分。这部分内存可以被不同的进程共享,从而作为通信的手段,同时文件内容也会持久化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值