进程间通信的“五大武器”

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD

如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。

😊 座右铭:不想当开发的测试,不是一个好测试✌️。

如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

Hello 小伙伴们,我是小曾。

今天我们来聊聊进程间通信。

文章目录

  • [1. 管道(Pipe)和命名管道(Named Pipe)](#1. 管道(Pipe)和命名管道(Named Pipe))
  • [2. 共享内存(Shared Memory)](#2. 共享内存(Shared Memory))
  • [3. 消息队列(Message Queue)](#3. 消息队列(Message Queue))
  • [4. 信号(Signal)与信号量(Semaphore)](#4. 信号(Signal)与信号量(Semaphore))
  • [5. 套接字(Socket)](#5. 套接字(Socket))

进程是操作系统中资源分配的基本单位,是一个正在运行的程序的实例。每个进程都有自己独立的地址空间,包括代码段、数据段和堆栈段。进程之间不共享资源,除非通过进程间通信IPC(Inter-Process Communication)。

进程间通信是指两个或多个进程之间交换数据或信息的方式。常见的 IPC 方式有以下几种:

1. 管道(Pipe)和命名管道(Named Pipe)

  • 管道是一种半双工的通信方式,数据只能单向流动。
  • 命名管道在管道的基础上增加了一个名称,可以实现双向通信。
  • 管道和命名管道适用于亲缘关系的进程间通信。

2. 共享内存(Shared Memory)

  • 共享内存允许多个进程访问同一块内存区域,从而实现高效的数据交换。
  • 共享内存通常配合信号量或互斥锁使用,以解决并发访问的同步问题。
  • 共享内存适用于通信双方数据交换量大,且要求低延迟的场景。

3. 消息队列(Message Queue)

  • 消息队列允许进程间异步、非阻塞地交换数据。
  • 消息队列具有缓存功能,可以暂存未及时处理的消息。
  • 消息队列适用于进程间解耦,异步通信的场景。

4. 信号(Signal)与信号量(Semaphore)

  • 信号是一种异步通信机制,用于通知进程发生某些事件,可用于进程间的简单通知,如中断、终止等。

  • 信号可以用来通知进程信号量的变化。例如,一个进程在获取信号量失败时,可以选择挂起自己,并等待收到一个信号来唤醒。信号通信简单,但功能较为有限,一般作为其他

    IPC 方式的补充。

  • 信号量用于实现进程间的互斥与同步,防止多个进程同时访问共享资源。进程可以通过"P"操作(申请)和"V"操作(释放)来获取和释放信号量。

  • 信号量可以用来实现对信号的处理。例如,可以使用信号量来控制信号处理程序的并发执行,以防止竞态条件的发生。

  • 信号和信号量可以结合使用,形成更加复杂的同步和通信机制。例如,可以使用信号量来控制对共享资源的访问,而使用信号来通知资源状态的变化。

5. 套接字(Socket)

  • 套接字是一种基于网络协议的 IPC 方式,可跨主机进行通信。
  • 套接字支持多种网络协议,如 TCP/IP,UDP 等,适用于复杂的网络环境。
  • 套接字通信灵活,但相对于其他IPC方式,通信开销较大。

> 也许世界上有五千朵,和你一模一样的花,但只有你是我独一无二的玫瑰。

相关推荐
RisunJan21 分钟前
Linux命令-sysctl(运行时修改内核参数)
linux·网络·智能路由器
A_humble_scholar35 分钟前
Linux 网络基础(三)下的 HTTP 核心详解:从请求响应到状态管
linux·网络·http
袅沫36 分钟前
Nginx中部署多个前端项目——区分路径
服务器·前端
Lucis__40 分钟前
如何实现长连接通信机制?Websocket的最佳实践
网络·websocket·网络协议
fei_sun1 小时前
UVM中的TLM1.0通信
运维·服务器·uvm
MartinYeung51 小时前
[论文学习]MCPTox:面向真实世界MCP服务器的工具投毒攻击基准测试
运维·服务器·学习
JAVA面经实录9172 小时前
网络编程基础(Java Web/分布式前置·完整版)(十一)
java·前端·网络
汽车仪器仪表相关领域2 小时前
SIRIUS R1DB/R2DB便携式一体化数据采集系统
大数据·人工智能·功能测试·深度学习·压力测试
Escalating_xu2 小时前
【Linux】基础 I/O 深度解析:FILE、文件描述符、open/read/write、重定向与缓冲区
java·linux·服务器
城管不管2 小时前
MySQL 慢查询完整排查
java·服务器·jvm·数据库·mysql·spring·面试