二十四、信号、管道、消息队列和共享内存

简介: 二十四、信号、管道、消息队列和共享内存

1、信号-signal


信号是软件对中断通知事件的处理。


Examples:SIGFPF,SIGKILL,SIGUSR1,SIGSTOP,SIGCONT


软件接收到信号是会有以下几种处理方式:


Catch:指定信号处理函数被调用


Ignore:依靠操作系统默认操作,Example:Abort,memory,dump,suspend or resume process


Mask:闭塞信号因此不会传送,但当处理同种类型的信号时,可能知识暂时不会传送


应用程序信号处理和内核的交互过程如下图所示:



63258d1595da454aae96697ed7f6e33c.png


2、管道-pipe



管道是用来进行数据交换的,其本质是内核中的一块缓冲区buffer。


在Linux中的分页显示目录的功能可以通过下述语句进行实现:


ls | more

其中,ls和more都是shell创建进程,他们通过管道来进行数据交换,如下图所示:

d5502a1e44434300aa2ad54c5776228d.png



进程ls和more不关系是从哪里读取或者写入到哪里,在内存中实际上ls将数据会输出到内存中的一块buffer(缓冲区),而more会从内存缓冲区buffer中取数据。buffer的大小是有限,当管道buffer填满之后,ls会进入sleep状态;同样,当管道buffer中没有数据时,more也会进入sleep状态。




3、消息队列-message queue


消息队列也是数据传输的一种机制,管道是父进程为子进程建立的数据连接关系,若进程之间不是同一个父进程,则管道没法工作;消息队列可以实现多个不相关的进程通过消息队列来传递数据,同时消息队列中传递的数据可以是结构化的数据。消息队列按照FIFO的方式来管理消息,消息队列对信息处理的方式如下图所示:


755ddbcd4f984dc2b732db4a10c3de6f.png

4、共享内存-share memory


前面两种管道和消息队列都是间接通信的方式,共享内存是一种直接通信的方式。几个进程之间共享一块内存空间。每一个进程都有自己私有的地址空间,但在每个地址空间中,又明确地设置了共享内存段。直接读写方式,不用send和receive来完成数据共享,其优点是可以使得进程凯苏方便地共享数据,其不足是必须同步数据访问。共享内存示意图如下图所示:



4a982aa141b244aa86875e39790ea9ef.png






相关文章
|
5月前
|
消息中间件 Linux 开发者
Linux进程间通信秘籍:管道、消息队列、信号量,一文让你彻底解锁!
【8月更文挑战第25天】本文概述了Linux系统中常用的五种进程间通信(IPC)模式:管道、消息队列、信号量、共享内存与套接字。通过示例代码展示了每种模式的应用场景。了解这些IPC机制及其特点有助于开发者根据具体需求选择合适的通信方式,促进多进程间的高效协作。
203 3
|
6月前
|
机器学习/深度学习 边缘计算 量子技术
ICML 2024:信号表征指数级强、内存节省超35%,量子隐式表征网络来了
【7月更文挑战第6天】QIREN,量子隐式表征网络,借助量子计算增强信号处理能力,内存效率提升35%以上。该技术旨在改进高频信号建模,提升图像和音频处理任务的性能,同时在资源受限环境下减少内存需求。尽管面临量子技术成熟度和训练复杂性的挑战,QIREN为机器学习开辟了新途径。[论文链接: https://arxiv.org/abs/2406.03873]**
81 3
|
6月前
|
消息中间件 分布式计算 网络协议
从管道路由到共享内存:进程间通信的演变(内附通信方式经典面试题及详解)
进程间通信(Inter-Process Communication, IPC)是计算机科学中的一个重要概念,指的是运行在同一系统或不同系统上的多个进程之间互相发送和接收信息的能力。IPC机制允许进程间共享数据、协调执行流程,是实现分布式系统、多任务操作系统和并发编程的基础。
从管道路由到共享内存:进程间通信的演变(内附通信方式经典面试题及详解)
|
5月前
|
消息中间件 存储 网络协议
从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘
在操作系统中,进程间通信(IPC)是至关重要的,它提供了多种机制来实现不同进程间的数据交换和同步。本篇文章将详细介绍几种常见的IPC方式,包括管道、信号、消息队列、共享内存、信号量和套接字,帮助你深入理解并合理应用这些通信方式,提高系统性能与可靠性。
493 0
|
6月前
|
消息中间件 Linux
【Linux】进程间通信——system V(共享内存 | 消息队列 | 信号量)(下)
【Linux】进程间通信——system V(共享内存 | 消息队列 | 信号量)(下)
81 0
|
6月前
|
消息中间件 存储 Linux
【Linux】进程间通信——system V(共享内存 | 消息队列 | 信号量)(上)
【Linux】进程间通信——system V(共享内存 | 消息队列 | 信号量)(上)
93 0
|
7月前
|
存储 安全 Python
进程通信 , 信号量 , 队列 , 管道 , 共享内存
进程通信 , 信号量 , 队列 , 管道 , 共享内存
|
7月前
|
消息中间件 Java Apache
消息队列 MQ产品使用合集之Broker内存瞬间增大一倍一般是什么导致的
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
2月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
359 1
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。