当前位置: 首页 > news >正文

Linux对网络通信的实现

一、NIO为什么很少注册OP_WRITE事件

1、OP_WRITE触发条件:当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间,小块数据直接写入即可,没必要注册该操作类型,否则该条件不断就绪浪费cpu;但如果是写密集型的任务,比如文件下载等,缓冲很可能满,注册该操作类型很有必要,同时注意写完后取消注册

1、单线程Reactor

之前已经解释过了,就是一个线程处理连接、读、业务处理、写,redis5.0时候用的就是单线程Reactor模式,我再把图挂一次

2、多线程Reactor

redis6.0是采用多线Reactor模式,但是有点不同,主线程处理连接和读事件,子线程去处理具体读、写操作,具体的业务操作为了降低并发操作,还是主线程去处理

二、直接内存比堆内存快在哪里

使用直接内存就会少一次数据拷贝

三、零拷贝,Linux对零拷贝的实现

一次读取和发送操作就会有四次用户态到内核态的切换

传统数据传输(DMA拷贝不需要CPU参与)

 Linux的MMAP内存映射

通过MMAP系统调用直接读取文件,不需要CPU参与拷贝

Linux的sendfile

Linux的slice

PIPE管道类似于共享内存两次拷贝和两次上下文切换(因为调用系统函数slice)

NIO目前只支持MMAP和sendfile
kafka通过客户端发来消息通过MMAP和顺序写持久化到磁盘,再通过sendfile把消息发送给客户端
Netty可以在直接内存上操作的,并且引入了逻辑缓冲区,多个缓冲区合并一个,后面再看吧

四、Linux网络IO模型

1、同步和异步

关注的是调用方是否主动获取结果

  1. 同步:同步的意思就是调用方需要主动等待结果的返回
  2. 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知, 回调函数等。

2、阻塞和非阻塞

主要关注的是等待结果返回调用方的状态

  1. 阻塞:是指结果返回之前,当前线程被挂起,不做任何事
  2. 非阻塞:是指结果在返回之前,线程可以做一些其他事,不会被挂起。

3、Linux的五种I/O模型

1)阻塞I/O(blocking I/O)
2)非阻塞I/O(noblocking I/O)
3)I/O复用(select、poll和epoll)( I/O multiplexing)
4)信号驱动I/O(signal driven I/O (SIGIO))
5)异步I/O(asynchronous I/O)

IO 复用需要使用两个系统调用(select 和 recvfrom),而 blocking IO 只 调用了一个系统调用(recvfrom)。但是,用select 的优势在于它可以同时处理多个connection。 所以,如果处理的连接数不是很高的话,使用 select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。select/epoll的优势 并不是对于单个连接能处理得更快,而是在于能处理更多的连接。

4、Linux下的IO复用编程

select,poll,epoll 都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序 进行相应的读写操作。但select,poll,epoll 本质上都是同步I/O,因为他们都需要在读写事 件就绪后自己负责进行读写,并等待读写完成。

相关文章:

Linux对网络通信的实现

一、NIO为什么很少注册OP_WRITE事件 1、OP_WRITE触发条件:当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间,小块数据直接写入即可,没必要注册该操作类型,否则该条件不断就绪浪费cpu;但如果是写密集型…...

【开源】基于SpringBoot的车险自助理赔系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车辆档案模块2.4 车辆理赔模块2.5 理赔照片模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 车辆表3.2.3 理赔表3.2.4 理赔照片表 四、系统展示五、核心代码5.1 查询车…...

减少磁盘读/写中延迟时间的方法(交替编号,错位命名)

目录 1.延迟时间的优化空间2.交替编号3.磁盘地址结构的设计1.若物理地址结构是(盘面号,柱面号,扇区号)2.若物理地址结构是(柱面号,盘面号,扇区号) 4.错位命名 关于磁盘延迟时间的概念请看博主的…...

Perl爬虫程序

以下是一个使用Perl爬虫程序,用于爬取图像。每行代码的中文解释如下: #!/usr/bin/perl ​ use strict; use warnings; use Mojo::UserAgent; use JSON; ​ # 创建一个Mojo::UserAgent实例 my $ua Mojo::UserAgent->new; ​ # 使用获取代理 my $prox…...

UE5使用Dash插件实现程序化地形场景制作

目录 0 dash下载后激活 1 初步使用 2 导入bridge的资产路径 3 练习成果 4 参考链接 0 dash下载后激活 1 初步使用 Dash插件点击蓝色的A,可以使用。 通过输入不同提示命令,来激活不同的功能。 2 导入bridge的资产路径 这里需要注意是UAsserts…...

23种设计模式(10)——门面模式

门面模式(Facade Pattern)又叫作外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。其主要特征是定义了一个高层接口,让子系统更容易使用,属于结构型设计模式。 其实,在日常编码工作中,我们都在有…...

磨人的Ts

const visibleData reactive<{ [key: number]: boolean }>({});这啥意思 这段代码的意思是创建了一个响应式对象visibleData&#xff0c;它是一个包含键为数字、值为布尔值的对象。 reactive函数是Vue 3 Composition API中的一个函数&#xff0c;它可以将一个普通对象…...

一个基于Excel模板快速生成Excel文档的小工具

介绍 DocumentGenerator是一个Excel快速生成工具&#xff0c;目标以后还能实现Word、pdf等的文件的生成。该程序独立运行&#xff0c;可通过HTTP接口调用其生成接口。 典型使用场景为如下&#xff1a; 使用者编写模板文件使用者准备模板文件的填充JSON数据内容使用者通过网络…...

服务器动态/静态/住宅/原生IP都是什么意思

​  在互联网的世界中&#xff0c;我们经常会听到关于IP地址的各种说法&#xff0c;比如服务器动态IP、静态IP、住宅IP和原生IP。那么这些术语究竟代表着什么意思呢?让我们一起来了解一下。 动态IP 动态IP(Dynamic IP)是指互联网服务提供商(ISP)在每次用户上网时&#xff0c…...

缓解大模型幻觉问题的解决方案

本文记录大模型幻觉问题的相关内容。 参考&#xff1a;Mitigating LLM Hallucinations: a multifaceted approach 地址&#xff1a;https://amatriain.net/blog/hallucinations &#xff08;图&#xff1a;解决大模型幻觉的不同方式&#xff09; 什么是幻觉&#xff1f; 幻觉…...

Python装饰器进阶:深入理解与最佳实践

1、什么是装饰器 https://docs.python.org/zh-cn/3.7/glossary.html#term-decorator 官网介绍的很简单&#xff0c;返回值为另一个函数的函数&#xff0c;通常使用 wrapper 语法形式来进行函数变换。装饰器就是闭包的应用&#xff0c;是用来**装饰&#xff08;修改或增强&…...

数据库数据恢复—Oracle数据库报错ORA-01110错误的数据恢复案例

Oracle数据库故障&#xff1a; 北京某公司一台运行oracle数据库的服务器&#xff0c;机房意外断电导致该服务器重启&#xff0c;重启后发现oracle数据库报错。该Oracle数据库没有备份。 Oracle数据库数据恢复过程&#xff1a; 1、北亚企安数据恢复工程师检查该oracle数据库的数…...

如何通过adb控制安卓手机wifi

一、准备工作 1、先用USB数据线 将手机和电脑连接在一起 1&#xff09; 数据线连接手机和电脑&#xff0c;选择“传输文件”的连接方式&#xff1b; 2&#xff09; 在手机上&#xff0c;打开“开发者选项”、“USB调试”&#xff1b; 2、在电脑上安装adb工具&#xff0c;参考…...

VR全景应用广泛体现在哪里?有何优势?

VR全景作为一种新型营销方式&#xff0c;正在逐渐走进人们的视线&#xff0c;它区别于以往单一角度的照片和视频&#xff0c;VR全景制作显得更加直观、更加真实、更加生动。VR全景通过VR技术将所拍摄的图片变成720度可观看的场景模式&#xff0c;把产品的特色以及魅力整体呈现展…...

【深度学习】Python使用指定gpu运行代码

命令行指定显卡GPU运行python脚本 在大型机构分配的服务器集群中&#xff0c;需要使用GPU的程序默认都会在第一张卡上进行&#xff0c;如果第一张卡倍别人占用或者显存不够的情况下&#xff0c;程序就会报错说没有显存容量&#xff0c;所以能够合理地利用GPU资源能帮助你更快更…...

二叉树的遍历

树森林二叉树先序遍历先序遍历先序遍历后序遍历中序遍历中序遍历 1.前序遍历 leetcode题目链接 1.1 递归 前序遍历递归方式 class Solution { public:vector<int> preorderTraversal(TreeNode* root) {vector<int> res;if(root){res.push_back(root->val);ve…...

分布式限流:Redis

目录 1:如何实现分布式限流 2:限流的几种类别 2.1:固定窗口限流 2.2:滑动窗口限流 2.3:漏桶限流 2.4:令牌桶限流 3:实现分布式限流:Redis 3.1:引入Redisson的依赖包 3.2:初始化Redisson 3.3:创建Redisson的限流类 1:如何实现分布式限流 1:把统计用户的使用频率等这些…...

python excel接口自动化测试框架

前言 前些天写了pytestyamlallure接口自动化测试框架这篇文章。 今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方法&#xff0c…...

Java开发面试--MongoDB专区

1、你是否了解 MongoDB&#xff1f; 答&#xff1a; 是的&#xff0c;我了解 MongoDB。MongoDB是一个流行的NoSQL数据库&#xff0c;它以文档的形式存储数据&#xff0c;具有高度的灵活性和可扩展性。我熟悉MongoDB的基本概念和特性&#xff0c;例如集合&#xff08;Collectio…...

当『后设学习』碰上『工程学思维』

只要我成为一个废物&#xff0c;就没人能够利用我&#xff01; 雷猴啊&#xff0c;我是一只临期程序猿。打过几年工&#xff0c;写过几行代码。但今天我不想聊代码&#xff0c;我们聊聊学习这件事。 技术年年更新&#xff0c;尤其是前端框架&#xff0c;很多时候觉得学习速度都…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数&#xff09;shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数&#xff09; 思路&#xff1a; 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...