进程间通信的常见方式

news2024/11/16 5:41:46

 

进程间通信是计算机系统中不同进程之间进行数据交换和共享信息的方式。
父子进程之间其他地址空间不一样,但共享同一块内核空间。
进程间通信的本质还是通过内核开辟缓冲区,一个进程写,一个进程读这样的工作原理。

常见的通信方式包括:

1.管道(Pipe):一种单向通信方式,用于在父子进程或者兄弟进程之间传输数据。
2.命名管道(Named Pipe):与管道类似,但具有路径名与之关联,允许无亲缘关系的进程间进行通信。
3.信号(Signal):用于通知进程发生了某种事件,例如中断信号。
4.消息队列(Message Queue):允许进程通过消息传递进行通信,消息在队列中按顺序排列。
5.共享内存(Shared Memory):允许多个进程访问同一块物理内存,实现高效的数据共享。
6.套接字(Socket):在网络编程中常见,允许不同主机上的进程进行通信。
7.信号量(Semaphore):用于控制对共享资源的访问,防止多个进程同时访问造成的竞争条件。
8.文件(File):通过读写文件进行通信,也可以通过文件锁实现进程间的同步和互斥。

 

 管道

 管道是最基本的一种IPC机制,只能用于有血缘关系的父子进程或者是兄弟进程。
特点:
本质是一个伪文件(内核缓冲区)

  • 基于环形队列机制,内核里的一个缓冲区
  • 一个读文件描述符,一个写文件描述符
  • 管道规定写段流入,读端流出

局限性:

  • 双向半双工(socket通信是双向全双工)
  • 不能自己写自己读
  • 数据读完就没了,不能反复读取(读完描述符地址后移不可恢复)
  • 只能有公共祖先的进程之间

上面几个特点和局限性都可以借助环形队列来理解。

管道的基本用法
 int pipe(int fd[2]) //创建并打开管道
fd[0]:读端
fd[1]:写端
返回值0为成功

读端:
1.管道中有数据 read返回读到的字节数
2.管道中没数据 :
        1.写端无描述符 read返回0(类似读到文件尾)
        2.写段有描述符 read阻塞等待

写段:
1.读端全部被关闭  进程被异常终止
2.读端没有被全部关闭  
        1.管道没满,write数据,返回写入的实际字节数
        2.管道满,write阻塞等待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1476915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一键安装|卸载 mysql 8.2.0 shell脚本

场景:为了在无网、外网 mysql 安装方便,这里分享一个自己编写得 shell脚本 这里以当前最新版 mysql 8.2.0;centos-7 二进制包下载: 下载地址 mysql_install.sh #!/bin/bash # 解压安装包 tar -xf mysql-8.2.0-linux-glibc2.17-x8…

Unity - 相机画面为黑白效果

一、 在Hierarchy中创建一个Global Volume,并设置它为局部作用 二、 将场景出现的作用域范围缩小至相机所在位置,将相机包含即可。 三、添加覆盖组件Color Adjustments,并将Saturation直接拉为-100 。 此时,相机拍摄画面为黑白,场景视图中…

ifcplusplus 示例 函数中英文 对照分析

有需求,需要分析 ifc c渲染,分析完,有 230个函数,才能完成一个加载,3d加载真的是大工程! 函数中英文对照表,方便 日后开发,整理思路顺畅!!!&#…

回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测

回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测 目录 回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-BiTCN-B…

kubesphere jenkins 流水线 未运行(解决方案)

场景: 在kubesphere 中运行 流水线 devops 结果,显示未运行 但是用 admin 账户是可以运行成功的。 问题解决 1- 查日志: 然后 Caused: org.acegisecurity.userdetails.UsernameNotFoundException: org.springframework.security.core.…

yolov5v7v8目标检测增加计数功能--免费源码

在yolo系列中,很多网友都反馈过想要在目标检测的图片上,显示计数功能。其实官方已经实现了这个功能,只不过没有把相关的参数写到图片上。所以微智启软件工作室出一篇教程,教大家如何把计数的参数打印到图片上。 一、yolov5目标检测…

拥有美国洛杉矶RAKsmart云服务器:探索无限可能

随着信息技术的飞速发展,云服务器已成为企业和个人用户不可或缺的重要工具。美国洛杉矶的RAKsmart云服务器,凭借其卓越的性能、稳定的网络环境和高级的安全性,为用户提供了无尽的便利和可能性。那么,拥有这样一台云服务器&#xf…

倔强的人适合什么职业?

倔强的人总是有一股咬牙坚持的意志力,他们不管面对怎样的困境,哪怕称得上是绝境的处境,依然愿意一往直前,这种不服输和不妥协的精神感染了很多人。 倔强的人可以坚持自己的想法,不会因为外界因素和某些人的看法而有所…

VR全景HDR拍摄教程

什么是HDR? HDR可以用在哪里? 书面解释:HDR(高动态范围 High Dynamic Range)摄影,是摄影领域广泛使用的一种技术。 是不是有点懵? 我们来看一个实际的拍摄现场环境,你就懂了 我们…

文物预防性保护系统方案的需求分析

没有文物保存环境监测,就不能实施有效的文物预防性保护。因此要建立文物预防性保护体系,一定要先有良好的文物状态监测制度,进而进行科学有效的文物保护管理。所以,导入文物预防性保护监测与调控系统,首先就是要针对文物进行全年温度、湿度、光照等关键参…

HW高水位问题及解决办法

一、问题描述及分析 应用业务反馈应用响应缓慢。登录数据库检查,发现数据库响应慢,有大量enq:HW–contention等待事件。结合awr报告和ash报告,发现整体等待时间消耗在推高水位线征用上,如下awr top事件:Ash消耗也是en…

循环结构的基本概念是什么?

一、问题 在实际问题中,经常会⽤到循环结构,如求100以内的n的阶乘、杨辉三⻆等,那什么是循环结构呢? 二、解答 循环结构也就是反复执⾏⼀段指令,直到满⾜某个条件为⽌。例如,要计算⼀个公司的所有消费总额…

HTTP详解(HTTP的特点,状态码,工作原理,GET和POST的区别,如何解决无状态通信)!!!

文章目录 一、HTTP协议简介二、HTTP的主要特点三、HTTP之URL四、Request和Respons五、HTTP的状态码六、HTTP工作原理七、GET和POST请求的区别八、解决HTTP无状态通信——Cookie和Session 一、HTTP协议简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议&…

简单网站模板1(HTML)

想要拥有自己的网站&#xff0c;却不知该如何才能简约好看&#xff0c;接下来分享一种自己搭建的网站模板&#xff0c;希望大家喜欢。 展示图&#xff1a; CODE: <!DOCTYPE html> <html> <head><title>我的网站</title><style>body {fo…

《TCP/IP详解 卷一》第10章 UDP和IP分片

目录 10.1 引言 10.2 UDP 头部 10.3 UDP校验和 10.4 例子 10.5 UDP 和 IPv6 10.6 UDP-Lite 10.7 IP分片 10.7.1 例子&#xff1a;IPV4 UDP分片 10.7.2 重组超时 10.8 采用UDP的路径MTU发现 10.9 IP分片和ARP/ND之间的交互 10.10 最大UDP数据报长度 10.11 UDP服务器…

【Linux】实时查看服务器信息

查看服务器CPU使用率 使用命令mpstat 1。这里的1表示每隔1秒更新一次CPU使用率。如果系统未安装mpstat&#xff0c;可以通过安装sysstat包来获取它。 在基于Debian的系统&#xff08;如Ubuntu&#xff09;上&#xff0c;使用命令&#xff1a; sudo apt-get update sudo apt-…

微服务之qiankun主项目+子项目搭建

主项目使用history&#xff0c;子项目使用hash模式 1. 下载安装"qiankun": "^2.10.13"2. 手动调用qiankun,使用vue脚手架搭建的项目1. 主项目配置&#xff08;我使用的是手动调用乾坤&#xff0c;在指定页面显示内容&#xff09;1. 要使用的页面中引入乾坤…

LeetCode 2125.银行中的激光束数量

银行内部的防盗安全装置已经激活。给你一个下标从 0 开始的二进制字符串数组 bank &#xff0c;表示银行的平面图&#xff0c;这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布&#xff0c;由若干 ‘0’ 和若干 ‘1’ 组成。‘0’ 表示单元格是空的&#xff0…

WebServer -- 日志系统(下)

目录 &#x1f33c;整体思路 &#x1f382;基础API fputs 可变参数宏 __VA_ARGS__ fflush &#x1f6a9;流程图与日志类定义 流程图 日志类定义 &#x1f33c;功能实现 生成日志文件 && 判断写入方式 日志分级与分文件 &#x1f33c;整体思路 日志系统分两部…

Vue+Flask电商后台管理系统

在这个项目中&#xff0c;我们将结合Vue.js前端框架和python后端框架Flask&#xff0c;打造一个功能强大、易于使用的电商后台管理系统 项目演示视频&#xff1a; VueFlask项目 目录 前端环境&#xff08;Vue.js&#xff09;&#xff1a; 后端环境&#xff08;python-Flask&…