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

【计算机网络 - 基础问题】每日 3 题(五十八)

✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)

172. epoll 的工作模式

  • LT 模式 (水平触发)

假设委托内核检测读事件 -> 检测 fd 的读缓冲区

读缓冲区有数据 - > epoll 检测到了会给用户通知

  1. 用户不读数据,数据一直在缓冲区,epoll 会一直通知
  2. 用户只读了一部分数据,epoll 会通知
  3. 缓冲区的数据读完了,不通知

LT(level - triggered)是缺省的工作方式,并且同时支持 block 和 no-block socket。在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的 fd 进行 IO 操作。如果你不作任何操作,内核还是会继续通知你的。

  • ET (边沿触发)

假设委托内核检测读事件 -> 检测 fd 的读缓冲区

读缓冲区有数据 - > epoll 检测到了会给用户通知

  1. 用户不读数据,数据一直在缓冲区中,epoll 下次检测的时候就不通知了
  2. 用户只读了一部分数据,epoll 不通知
  3. 缓冲区的数据读完了,不通知

ET(edge - triggered)是高速工作方式,只支持 no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过 epoll 告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了。但是请注意,如果一直不对这个 fd 作 IO 操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once)。
ET 模式在很大程度上减少了 epoll 事件被重复触发的次数,因此效率要比 LT 模式高。epoll 工作在 ET 模式的时候,必须使用非阻塞套接口,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。

173. LT 模式效率更高,还是 ET 模式效率更高?

我注意到 flamingo 服务器 accept,read,write 都是一个事件调用一次。我看某个库 epoll LT 模式是在 while 循环内进行 accpet,read,write 直到 EAGAIN 的,我个人认为循环调用可以减少事件触发的次数从而提高效率。但是有人说在循环内处理调用会导致该线程一直被这个 fd 占用,比如写 100M 的文件,这时候别的 fd 都不能及时处理了。群主觉得 LT 模式在循环内处理读写调用怎么样?

一次事件处理一次,这个处理机会通过回调提供出去,更甚可以把 fd 暴露出去让用户自己去怎么收。epoll LT 模式灵活就在这里,既可以一次性收一点,也可以一次性收完(收到 eagain)。flamingo 是 LT 模式。ET 模式是必须收完的,你说的对,如果某些 fd 经常有数据,且数据量大,ET 模式就会一直占着线程 cpu。那么其他 fd 就可能饿死了。举个例子,做内网视频监控的,每个连接上视频流都很大,你不能把一个连接上处理完再处理其他的。那样其他用户体验就不好了。所以,flamingo 没采用你说的方式。而是把接口暴露出来,按需处理。退一步说,某一连接突然来了很大一段数据,可以拆分成几十个数据包。那为什么不先处理一些呢,如果放在循环里面就必须先把数据收完再处理了。业务线程这样闲的时候闲死,忙的时候忙死。

所以到底选择 ET 模式还是 LT 模式要结合业务。有的应用是数据包频率高,单个包数据不大,有的业务是单个包大,但数据频率不高,有的是兼顾二者。所以要综合考虑,结合业务场景。这也是为什么大多数网络库都不限定必须用 LT 或 ET 模式。

174. IO 特别密集时 epoll 效率还高吗?

可以先解释 io 特别密集时为什么 epoll 效率不高。原因是:

  • 连接密集(短连接特别多),使用 epoll 的话,每一次连接需要发生 epoll_wait -> accpet -> epoll_ctl 调用,而使用 select 只需要 select->accpet,减少了一次系统调用。
  • 读写密集的话,如果收到数据,我们需要响应数据的话,使用 epoll 的情况下, read 完后也需要 epoll_ctl 加入写事件,相比 select 多了一次系统调用

相关文章:

【计算机网络 - 基础问题】每日 3 题(五十八)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...

Netty入门基础:IO模型中BIO\NIO概念及区别【附演示代码】

文章目录 😀BIO💢实战demo 🌈NIO🏍Buffer核心属性核心方法 🎗Channel🎈Selector核心方法 🧨实战demo 🎨粘包与半包 😀BIO 传统IO模型,同步阻塞,每…...

vue2 使用环境变量

一. 在根目录下创建.env.xxx文件 .env 基础系统变量,无论何种环境,都可使用其中配置的值,其他环境中的变量会覆盖.env中的同名变量。 .env.development 开发环境 .env.production 生产环境 .env.staging 测试环境 二. 内容格式 vue2 使用是以…...

数据预处理

继续提取代码片段: 12. **导入iris数据集并查看前5行数据**: python from sklearn.datasets import load_iris iris load_iris() X iris.data print(iris数据集的维度为:, X.shape) print(iris数据集的前5行数据为:\n, X[:5]) …...

django宠物领养管理系统-计算机毕业设计源码26858

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3…...

使用TeamViewer远程局域网内的两台电脑

有个场景,有人还不知道TV可以局域网操作,记录一下。 主要就是修改设置,将取消激活改为接受 然后输入受控端的ip即可...

GUI简介、Swing的常用组件、java程序的运行过程、class文件、JAR、runable_jar、双括号初始化

GUI简介 GUI:图形用户界面,在计算机中采用图形的方式显示用户界面 java的GUI开发 AWT:java最早推出的GUI编程开发包,界面风格跟随操作系统SWT:eclipse就是java使用SWT开发的Swing:在AWT的基础上扩充了功能…...

@Autowired和@Resource和getBean()区别

今天遇到一个对我来说很奇葩的错误,我想在Service中注入bean,我这里使用了Autowired和Resource都不能注入,导致初始化失败,使用了getBean()方法就可以注入。从来没有遇到过这个问题。后来我查询了一下,才明白了原理。我…...

Merlion笔记(四):添加一个新的预测模型

文章目录 1 模型配置类2 模型类3 运行模型:一个简单的例子4 可视化5 定量评估6 定义一个基于预测器的异常检测器 本文提供了一个示例,展示如何向 Merlion 添加一个新的预测模型,遵循 CONTRIBUTING.md 中的说明。建议在阅读本篇文章之前,先查…...

【论文阅读】ESRGAN

学习资料 论文题目:增强型超分辨率生成对抗网络(ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks)论文地址:[1809.00219] ESRGAN:增强型超分辨率生成对抗网络代码:xinntao / ESRGAN&am…...

电脑异常情况总结

文章目录 笔记本无症状息屏黑屏 笔记本无症状息屏黑屏 🍎 问题描述: 息屏导致黑屏;依次操作计算机--》右键--》管理--》事件查看器--》Windows日志--》系统;从息屏到异常黑屏之间出现了很多错误,如下:事件…...

[项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp

目录 一、前言 二、项目的相关背景 三、搜索引擎的宏观原理 四、搜索引擎技术栈和项目环境 五、正排索引 VS 倒排索引--原理 正排索引 分词 倒排索引 六、编写数据去除标签和数据清洗模块 Parser 1.数据准备 parser 编码 1.枚举文件 EnumFile 2.去标签ParseHtml(…...

PL/I语言的起源?有C语言,有B语言和A语言吗?为什么shell脚本最开始可能有#!/bin/bash字样?为什么不支持嵌套注释?

PL/I语言的起源 在20世纪50~60年代,当时主流的编程语言是COBOL/FORTRAN/ALGOL等,IBM想要设计一门通用的编程语言,已有的编程语言无法实现此要求,故想要设计一门新语言,即是PL/I. PL/I是Programming Language/One的缩写…...

gin入门教程(3):创建第一个 HTTP 服务器

首先设置golang github代理,可解决拉取git包的时候,无法拉取的问题: export GOPROXYhttps://goproxy.io再查看自己的go版本: go version我这里的版本是:go1.23.2 linux/arm64 准备工作做好之后就可以进行开发了 3.…...

Vue+ECharts+iView实现大数据可视化大屏模板

Vue数据可视化 三个大屏模板 样式还是比较全的 包括世界地图、中国地图、canvas转盘等 项目演示: 视频: vue大数据可视化大屏模板...

el-table 表格设置必填项

el-table 表格设置必填项 要在 el-table 中集成 el-form 来设置必填项,并进行表单验证,可以使用 Element UI 提供的表单验证功能。下面是一个详细的示例,展示了如何在 el-table 中使用 el-form 来设置必填项,并进行验证。 示例代…...

vivo 轩辕文件系统:AI 计算平台存储性能优化实践

在早期阶段,vivo AI 计算平台使用 GlusterFS 作为底层存储基座。随着数据规模的扩大和多种业务场景的接入,开始出现性能、维护等问题。为此,vivo 转而采用了自研的轩辕文件系统,该系统是基于 JuiceFS 开源版本开发的一款分布式文件…...

Vue学习笔记(四)

事件处理 我们可以使用 v-on 指令 (通常缩写为 符号) 来监听 DOM 事件,并在触发事件时执行一些 JavaScript。用法为 v-on:click"methodName" 或使用快捷方式 click"methodName" 事件处理器的值可以是: 内联事件处理器&#xff1…...

发送短信,验证码

短信 注册阿里云的账号 开通短信服务 测试短信服务是否可用 导入jar <!-- 短信相关 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.0</version><…...

国内大语言模型哪家更好用?

大家好&#xff0c;我是袁庭新。 过去一年&#xff0c;AI大语言模型在爆发式增长&#xff0c;呈现百家争鸣之态。国内外相关厂商积极布局&#xff0c;并相继推出自家研发的智能化产品。 我在工作中已习惯借助AI来辅助完成些编码、创作、文生图等任务&#xff0c;甚至对它们产…...

DeepSeek代码能力实测:3大编程范式通过率对比,92.7%准确率背后的5个隐藏陷阱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek HumanEval测试全景概览 HumanEval 是由 OpenAI 提出的函数级代码生成基准测试集&#xff0c;包含 164 道 Python 编程题&#xff0c;每道题提供函数签名、文档字符串&#xff08;docstring&am…...

Hperledger Fabric入门课程3 ——软硬件环境

购买专栏前请认真阅读:《Fabric项目学习笔记》专栏介绍 1. 硬件环境 不论是在当前系统上运行、云服务器还是虚拟机,建议内存4G或以上,硬盘空间建议50G以上。 2. 操作系统 Fabric 的操作一般在Linux 或 MacOS上,Mac暂时不支持Apple Silicon芯片即m1以后的芯片。 如果读者…...

保姆级教程:用Lumerical FDTD参数扫描功能,分析WO3薄膜厚度对反射率的影响

从零到精通&#xff1a;Lumerical FDTD参数扫描在薄膜光学设计中的实战指南 在光电材料研究和器件设计中&#xff0c;薄膜厚度的精确控制往往直接影响器件的光学性能。以三氧化钨&#xff08;WO₃&#xff09;薄膜为例&#xff0c;其厚度变化会显著改变反射光谱特性&#xff0c…...

计算内存(CIM)技术解析与AI硬件加速实践

1. 计算内存&#xff08;CIM&#xff09;技术解析&#xff1a;突破传统架构的能效瓶颈 在AI硬件加速领域&#xff0c;计算内存&#xff08;Compute-in-Memory, CIM&#xff09;正引发一场架构革命。传统冯诺依曼架构中"内存墙"问题已成为制约AI计算效率的主要瓶颈——…...

Go项目安全左移实践:集成Security-Shield实现自动化漏洞与密钥检测

1. 项目概述与核心价值 在当今的软件开发与运维实践中&#xff0c;应用安全已经从“附加题”变成了“必答题”。无论是个人开发者的小型项目&#xff0c;还是企业级的复杂系统&#xff0c;都面临着来自网络的各种潜在威胁。然而&#xff0c;安全工具的引入往往伴随着陡峭的学习…...

现实是期待的土壤,期待是改变现实的方向

期待的对立统一结构期待 理想应然&#xff08;正题&#xff09; vs 现实实然&#xff08;反题&#xff09;&#xff0c;二者的统一构成一个动态的矛盾运动。同一性&#xff08;相互依存&#xff09;&#xff1a;没有对现实的不满足和对未来的向往&#xff0c;就没有期待&#…...

终极飞书文档迁移方案:25分钟批量导出700+文档的完整指南

终极飞书文档迁移方案&#xff1a;25分钟批量导出700文档的完整指南 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 你是否曾因公司办公软件切换或数据备份而面临飞书文档迁移的困境&#xff1f;…...

GPU加速网络爬虫:OpenCL异构计算在数据采集中的实践

1. 项目概述&#xff1a;一个面向硬件加速的开源抓取工具包最近在折腾一些数据采集和自动化任务时&#xff0c;我常常遇到一个瓶颈&#xff1a;当需要处理海量网页、进行高频次请求或者解析复杂的动态内容时&#xff0c;传统的基于CPU的抓取框架&#xff08;比如Scrapy、Reques…...

5步解决网易云音乐NCM文件难题:ncmdumpGUI实战指南

5步解决网易云音乐NCM文件难题&#xff1a;ncmdumpGUI实战指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样的情况&#xff1a;在网易…...

服务器卡死别慌!手把手教你读懂NMI watchdog的soft lockup报错信息(附CentOS 7排查流程)

服务器卡死应急指南&#xff1a;NMI watchdog与soft lockup实战排查手册 凌晨三点&#xff0c;机房告警铃声大作&#xff0c;监控大屏上某台核心服务器的CPU使用率突然飙升至100%并持续不降。登录系统后&#xff0c;dmesg中赫然出现NMI watchdog: BUG: soft lockup - CPU#2 stu…...