你不一定知道的七种进程间通信方式

news2024/11/30 5:01:47

一、前言

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷贝到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。

二、管道

管道是一种半双工的通信方式。

        1.匿名管道

            只能在有联系的进程间进行通信(比如父子)

        2.命名管道

             可以在无联系的进程间进行通信

请添加图片描述

请添加图片描述

管道.rar: https://url18.ctfile.com/f/7715018-957899148-39e00e?p=6511 (访问密码: 6511)

三、socket

Socket不仅可以跨网络和不同主机进行进程间通信,还可以在同一主机进行进程间通信。

请添加图片描述

套接字.rar: https://url18.ctfile.com/f/7715018-957902811-f5161d?p=6511 (访问密码: 6511)

四、共享内存

共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

请添加图片描述

共享内存.rar: https://url18.ctfile.com/f/7715018-957899142-5b577c?p=6511 (访问密码: 6511)

五、信号量

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

请添加图片描述

信号量.rar: https://url18.ctfile.com/f/7715018-957899160-e52314?p=6511 (访问密码: 6511)

六、文件映射

将文件映射到进程指定内存,对内存的操作,就是对文件的操作,从而避免频繁的对文件进行读写的操作,并且操作效率比文件读写效率高很多,也能通过文件映射进行进程通信。

请添加图片描述

文件映射.rar: https://url18.ctfile.com/f/7715018-957965340-e701ae?p=6511 (访问密码: 6511)

七、消息队列

消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

1.CreateFile()创建发送接收消息队列

请添加图片描述

2.CreateMutex() 或 CreateSemaphore() 实现

请添加图片描述

3.通过窗口传递消息

请添加图片描述

消息队列.rar: https://url18.ctfile.com/f/7715018-958480335-0570bc?p=6511 (访问密码: 6511)

八、油槽

油槽不支持广播通信,其是一种单向数据传输的服务,即服务器接收,客户端发送的进程间通信的方式,和socket有点类似。

请添加图片描述

油槽.rar: https://url18.ctfile.com/f/7715018-958480338-1cb49c?p=6511 (访问密码: 6511)

九、结语
有什么不懂得可以问小编,反正小编也不会解答。更多win32api精彩文章持续输出,大家拭目以待,希望大家多多支持。

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

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

相关文章

Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析

引言 在使用 Easysearch 时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd source_reuse,我们最近重新优化了 source_reuse,使得它在吞吐量…

【ROS2RUN源码解析:解决ROS2 run命令找不到问题的详细流程】

文章目录 概要整体架构流程技术名词解释小结 概要 当你在使用ROS2时遇到找不到可执行文件的错误时,首先需要执行以下步骤来诊断问题。首先,使用命令printenv AMENT_PREFIX_PATH(或者ros2 pkg prefix加上包的名称)来检查你的功能包…

AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用

本心、输入输出、结果 文章目录 AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用前言AutoGen 简介快速入门AutoGen 安装相关支持相关代码相关架构图弘扬爱国精神AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用 编辑:简简单单 Online z…

Chrome 浏览器关闭后再打开,需要重新登录账号,解决办法

最近(2023-10-15)每次打开 Chrome 浏览器,Chrome 自身账号以及各个网站账号都需要重新登录,电脑本身为家用,使用时间不多的情况下,频繁登录账号很痛苦,也很迷惑。现找到解决办法,记录…

基于SSM大学生竞赛活动平台

基于SSM大学生竞赛活动平台的设计与实现 开发语言:Java 数据库:MySQL 技术:SpringSpringMVCMyBatisVue 工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 前台系统主要功能实现:首页列表展示、自愿者招聘、竞赛新闻查…

汇编语言基础

引言 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…

Stm32_标准库_13_串口蓝牙模块_手机与蓝牙模块通信

代码: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h"char News[100] "";uint8_t flag 1;void Get_Hc05News(char *a){uint32_t i 0…

设计模式之是简单工厂模式

分类 设计模式一般分为三大类:创建型模式、结构型模式、行为型模式。 创建型模式:用于创建对象,共五种,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式:用于处理类或对…

STM32 ---- 再次学习STM32F103C8T6/STM32F409IGT6

目录 一、环境搭建及介绍 关于STM32基础介绍 新建工程 外设案例 LED流水灯 蜂鸣器 上拉电阻和下拉电阻知识 电压比较器 c语言基础知识 类型、结构体、枚举 类型int8_t int16_t int32_t 宏替换 #define 和typedef用法 结构体两种填充方法 和 命名规则 枚举用法 常用…

云安全——云计算基础

0x00 前言 学习云安全,那么必然要对云计算相关的内容进行学习和了解,所以云安全会分为两个部分来进行,首先是云计算先关的内容。 0x01 云计算 广泛传播 云计算最早大范围传播是2006年,8月,在圣何塞【1】举办的SES&a…

Vs2017搭建QT开发环境

前置条件: vs2017 前提需要安装Qt的插件 : 若是没有,通过 “工具->扩展和更新->联机->Qt Visual Studio Tools”,安装Qt Visual Studio Tools 1、新建工程"文件->新建->项目",出现如下界面…

Yakit工具篇:爆破与未授权检测的使用

简介(来自官方文档) 爆破和未授权检测是网络安全领域中一种常见的测试技术,其主要目的是测试系统或应用程序中的口令是否强健,Yakit的爆破与未授权检测模块则实现了该部分的内容。 这个模块可以对多种常见协议和服务(如ftp、memcached、mon…

【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 信号量 一、信号量机制1.1 整型信号量1.2 记…

05_51单片机led流水线的实现

1:step创建一个新的项目并将程序烧录进入51单片机 以下是51单片机流水线代码的具体实现 #include <REGX52.H>void Delay500ms() //11.0592MHz {unsigned char i, j, k;i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }void main(){while(1){P1 0…

深入理解React中的useEffect钩子函数

引言&#xff1a; React是一种流行的JavaScript库&#xff0c;它通过组件化和声明式编程的方式简化了前端开发。在React中&#xff0c;一个核心概念是组件的生命周期&#xff0c;其中包含了许多钩子函数&#xff0c;用于管理组件的不同阶段。其中之一就是useEffect钩子函数&…

完成了一个小项目:修改了一个用PHP+MySQL写的建网站用的CMS原程序

最近一段时间&#xff0c;我建了一个网站。建一个网站及简单也复杂。要功能合适&#xff0c;界面合适&#xff0c;也不是容易的事。开始用了一个现成的建站软件WordPress&#xff0c;但是对界面不满意。后来找了另外一个带源码的程序&#xff0c;修改该程序花了十多天时间。到目…

metaRTC7集成lvgl ui demo编译指南

概要 开源轻量级嵌入式图形库lvgl:Light and Versatile Graphics Library&#xff0c;最低只需8kb内存&#xff0c;可为任何 MCU、MPU 和显示类型创建漂亮的 UI。 metaRTC新增lvgl demo&#xff0c;可在linux下编译运行。 源码下载 https://github.com/metartc/metaRTC/rel…

Spring Cloud的革新:服务网格和云原生整合

文章目录 介绍Spring Cloud服务网格的兴起Spring Cloud与Service Mesh的整合1. 服务发现2. 负载均衡3. 故障处理4. 安全性 云原生整合结论 &#x1f389;欢迎来到架构设计专栏~Spring Cloud的革新&#xff1a;服务网格和云原生整合 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f37…

【力扣1876】长度为三且各字符不同的子字符串

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接&#xff1a;长度为三且各字符不同的子字符串 如果一个字符串不含有任何…

一卷到底,大明哥带你横扫 Netty

上一个死磕 Java 专栏【死磕 NIO】(当然写的不是很好&#xff0c;争取今年将它重写一遍)是**【死磕 Netty】**的铺垫&#xff0c;对于我们 Java 程序员而言&#xff0c;我们在实际开发过程一般都不会直接使用 Java NIO 作为我们的网络编程框架&#xff0c;因为写出一套高质量的…