1.8io网络

同步机制条件变量

1> 条件变量本质上也是一个临界资源,维护了一个队列,当消费者要想指向前,先进入等待队列中,直到生产者唤醒后,才能执行

2> 由于多个消费者线程要进入等待队列时,可能产生竞态,为了解决该竞态,同样要引入互斥机制

3> 条件变量表示一个生产者和多个消费者之间的同步关系,而消费者和消费者之间没有同步关系

条件变量的API

创建条件变量

初始化条件变量

消费者线程进入等待队列

唤醒消费者线程

销毁条件变量

进程间的通信

通信概念

1> 多个线程之间的信息通信可以使用全局变量来完成,只需注意同步互斥机制即可

2> 多个进程之间的信息通信,不可用使用全局变量完成,因为多个进程之间用户空间是独立的,每个进程拥有自己的全局变量

3> 可以使用外部文件完成多个进程之间通信,一个进程向文件中写入数据,另一个进程从文件中读取数据。但是由于进程的调度是时间片轮询机制,不确定哪个进程先执行,所以该方案需要在多进程同步的基础上完成

4> 由于多个进程之间用户空间是独立的,但是内核空间是共享的,所以可以利用内核空间完成通信,一个进程向内核空间写入数据,另一个进程可以从内核空间取出数据

通信方式

1、内核提供了三种通信方式:无名管道、有名管道、信号

2、System V提供了三种通信方式:消息队列、共享内存、信号量(信号灯集)

3、套接字通信

管道

1> 在内核空间创建出一个特殊的文件(管道文件)

2> 对于管道文件中的数据操作是一次性的,当管道中的数据被读取后,就不存在了

3> 管道分为无名管道和有名管道:无名管道仅用于亲缘进程间的通信,而有名管道,既可以用于亲缘进程间通信,也可以用于非亲缘进程间通信

4> 管道的通信是半双工通信方式:

单工:只能A进程向B进程发送数据

半双工:同一时刻,只能A向B发数据或B向A发数据

全双工:同一时刻,AB进程可以互发消息

5> 管道遵循先进先出的原则:先写入的数据会先读取出来

6> 一个管道被打开后,会产生两端,分别是读端和写端,当两端全部都被关闭后,管道在内核中就消失了

7> 由于管道存在内核空间,对管道的操作只能使用系统调用(文件IO),而且不能使用lseek移动光标

无名管道

1> 无名管道:顾名思义就是没有名字的管道,不存在于文件系统中,管道文件创建出来后,在内存中存放

2> 由于在内存中存放,没有文件系统中的名字,所以,一个进程创建出来的无名管道文件,其他进程是没有办法打开的,所以该方式不适用于非亲缘进程间通信

3> 无名管道,只适用于亲缘进程间通信,并且,需要在创建子进程之前将管道文件打开

4> 无名管道的api

#include <unistd.h>

int pipe(int pipefd[2]);

5> 管道的特性

1、可以使用无名管道完成自己跟自己通信

2、管道的大小为:64K

3、管道的读写特点

当读端存在时:写管道有多少写多少,直到写满64k后,在write处阻塞

当读端不存在时:写管道写入数据后,会导致管道破裂

当写端存在时:读管道有多少读多少,没有数据的话,在read处阻塞

当写端不存在时:读管道有多少读多少,没有数据的话,不会在read处阻塞

有名管道

1> 有名管道:顾名思义就是有名字的管道,存储在文件系统中

2> 有名管道的操作也是一次性的,数据被读取后,就没有了

3> 虽然存储在外部磁盘上,但是,不用于存储信息,只是用于进程间通信

4> 有名管道既可以用于亲缘进程间通信,也可以用于非亲缘进程间的通信

5> 有名管道的api5> 有名管道的api

#include <sys/types.h>

#include <sys/stat.h>

int mkfifo(const char *pathname, mode_t mode);

信号

信号基本概念

1> 信号是软件模拟硬件中的中断,中断是硬件实现的,信号是软件实现的

2> 中断:停止当前正在进行的事情,去执行其他事情,执行结束后,继续执行自己的事

3> 一个进程可以给另一个进程发送信号;用户也可以给一个进程发送信号;内核可以向进程发送信号

4> 信号通信,属于异步通信:两个进程各干各的,互不影响

5> 信号处理方式:默认(一般是杀死进程)、忽略、捕获(捕获信号去做另一件事)

信号的种类及功能

信号绑定函数(signal)

#include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

信号发送函数(kill、raise)

#include <signal.h>

int kill(pid_t pid, int sig);

#include <signal.h>

int raise(int sig);

System V进程间通信(IPC对象)

1> 种类:

消息队列:在内核空间维护了一个队列,所有进程都可以向队列中存放数据,也可以从队列中取出数据

共享内存:将物理内存映射出来,共所有进程使用

信号量(信号灯集):主要完成进程的同步工作

2> 关于IPC的相关指令

ipcs: 查看所有IPC对象的详细信息

ipcs -q:只查看消息队列的详细信息

ipcs -m:只查看共享内存的详细信息

ipcs -s:只查看信号量的详细信息

ipcrm -q/-m/-s ID:表示删除指定的消息队列、共享内存、信号量

3> 关于系统5提供的进程间通信对象,都需要使用一个key值

消息队列

消息队列的API

1、创建key值

2、创建消息队列

3、向消息队列中存放数据

4、从消息队列中取消息

5、消息队列的控制函数

共享内存

1> 所谓共享内存,是将物理内存映射到不同的进程中,不同进程直接对映射出来的共享内存进行操作,无需进行用户空间和内核空间的切换

共享内存的相关API

1、创建key值

key_t ftok(const char *pathname, int proj_id);

2、申请物理内存,创建出共享内存段2、申请物理内存,创建出共享内存段

int shmget(key_t key, size_t size, int shmflg);

3、将共享内存映射到用户空间

void *shmat(int shmid, const void *shmaddr, int shmflg);

4、取消共享内存的映射

int shmdt(const void *shmaddr);

5、共享内存的控制函数

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如果一款葡萄酒是“裸”的,这意味着什么?

“裸”是葡萄酒商使用的一个术语&#xff0c;指的是这种葡萄酒具有它所酿造的葡萄的主要风味&#xff0c;没有任何橡木味的干扰&#xff0c;例如未经橡木的夏敦埃酒可以被描述为“裸”的。 “裸”这适用于所有没有经过橡木桶陈酿、没有经过苹果乳酸发酵&#xff0c;而是保留了新…

知识图谱gds使用记录

安装 从下载站下载对应的包到plugin目录下&#xff0c;修改配置文件/etc/neo4j/neo4j.conf&#xff0c;末尾加入gds.*&#xff0c;重新启动 在浏览器输入CALL gds.list()命令进行测试 建立图映射 为了使用图算法&#xff0c;需要先将图数据库的内容映射为一个新图 如果是全…

java基础之Java8新特性-方法引入

目录 1.简介 2.方法引入 方法引入遵循规范 方法引入种类 1.静态方法引入 2.对象方法引入 3.实例方法引入 4.构造函数引入 1.简介 方法引用是 Java 8 中引入的另一个重要特性&#xff0c;它提供了一种简洁的语法来直接引用现有方法或构造函数。方法引用可以看作是 Lambd…

代码随想录刷题题Day29

刷题的第二十九天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day29 任务 ● 01背包问题&#xff0c;你该了解这些&#xff01; ● 01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组 …

Web应用防火墙是什么?聊聊领先WAF解决方案

数字化进程的加速发展&#xff0c;Web站点及各类应用的数量呈现爆发式增长态势。与此同时&#xff0c;利用Web漏洞进行攻击的事件也与日俱增&#xff0c;黑客攻击手段不断升级&#xff0c;包括各种拟人化自动化攻击、API攻击以及0day攻击等&#xff0c;给Web应用安全防护带来了…

下载 SQL Server Management Studio (SSMS)

下载 SQL Server Management Studio (SSMS) - SQL Server Management Studio (SSMS) | Microsoft Learn 下载了SSMS之后&#xff0c;就可以不在本地安装SQL SERVER了&#xff0c;可以直接通过SSMS连接服务器&#xff0c;如下图&#xff0c;输入服务器地址&#xff0c;登录名和密…

燃油车智能化时代将终结,长安汽车凭啥引领“数智新汽车”周期?

日前高工智能汽车研究院发布报告称&#xff0c;2024年将是新能源市场的新拐点&#xff0c;燃油车智能化时代即将终结&#xff0c;新能源和智能化将深度融合发展。 伴随着整车电子电气架构加速迈入中央计算-区域控制架构时代&#xff0c;智能电动汽车将从单一功能升级的智能化1…

自动化的运维管理:探究Kubernetes工作机制的奥秘

1 云计算时代的操作系统 Kubernetes 是一个生产级别的 容器编排平台 和 集群管理系统 &#xff0c;能够 创建、调度容器&#xff0c;监控、管理服务器。 容器是什么&#xff1f;容器是软件&#xff0c;是应用&#xff0c;是进程。服务器是什么&#xff1f;服务器是硬件&#…

实用Unity3D Log打印工具XDebug

特点 显示时间&#xff0c;精确到毫秒显示当前帧数&#xff08;在主线程中的打印才有意义&#xff0c;非主线程显示为-1&#xff09;有三种条件编译符(如下图) 注&#xff1a;要能显示线程中的当前帧数&#xff0c;要在app启动时&#xff0c;初始化mainThreadID字段条件编译符…

虹科技术丨PCAN网关设备:打通通信壁垒,LED指示灯编程示例

来源&#xff1a;虹科汽车智能互联 虹科技术丨PCAN网关设备&#xff1a;打通通信壁垒&#xff0c;LED指示灯编程示例 原文链接&#xff1a;https://mp.weixin.qq.com/s/hpxssnDeD-43x3tyHJbAtA 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 导读 在工业自动化、汽…

使用Ray Marching进行3D渲染

要使用Ray Marching渲染 3D 场景&#xff0c;我们需要为每个像素发射一条光线。通过选择屏幕上的一个点&#xff08;一个像素&#xff09;&#xff0c;并从视点绘制一条射线&#xff0c;我们可以确定它是否击中一个对象&#xff0c;并决定应该在该像素上绘制什么。使用着色器&a…

51-5 Transformer 论文精读

李沐&#xff08;沐神&#xff09;、朱毅讲得真的好&#xff0c;干货蛮多&#xff0c;醍醐灌顶。编码器、解码器、多头自注意力、自回归的概念没搞清楚的话&#xff0c;值得认真读很多遍&#xff0c;甚至可以当成多模态大模型基础课程学习。 今天我们将讲的是transformer这个模…