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

Linux中 I/O 多路复用机制的边缘触发与水平触发

边缘触发(Edge Triggered, ET)与水平触发(Level Triggered, LT)

Linux中I/O复用机制epoll -CSDN博客

Linux中的 I/O 复用机制 select-CSDN博客

epoll 或其他 I/O 多路复用机制中,触发模式是指如何触发文件描述符的事件。触发模式决定了何时会通知程序处理该文件描述符的 I/O 操作。常见的触发模式有 边缘触发(ET)水平触发(LT)

1. 水平触发

水平触发(LT) 是最常见的触发模式,也是 selectpoll 默认使用的模式。在该模式下,事件触发是基于文件描述符的 当前状态,也就是说,只要某个文件描述符的状态保持满足条件,epoll_wait() 会一直返回这个事件,直到应用程序处理该事件。

  • 如果不理解可以看后面的例子
  • 适用场景:适用于大多数应用程序,特别是那些对高性能要求不那么严格的应用。

  • 工作原理:每次调用 epoll_wait() 时,系统都会检查文件描述符的状态。如果文件描述符处于就绪状态(比如可以读取或写入),即使应用程序没有及时处理,epoll_wait() 依然会返回该文件描述符,直到应用程序读取了数据或者完成了某项操作。

 

优点:处理逻辑简单。只要文件描述符满足条件,epoll_wait() 就会一直返回它,直到应用程序处理该事件。

稳定,适用于一般的多路复用场景。

缺点:对于高性能应用,可能会造成不必要的重复通知,特别是当文件描述符的状态没有改变时,epoll_wait() 会多次返回同一个文件描述符。

示例: 在水平触发模式下,如果一个套接字上的数据未被读取,epoll_wait() 会每次返回该文件描述符,直到数据被完全读取。

2. 边缘触发

边缘触发(ET) 模式的工作方式与水平触发不同。在该模式下,只有当文件描述符的状态发生变化时(比如从“未就绪”变为“就绪”),epoll_wait() 才会通知应用程序。简而言之,只有在事件边缘发生时,才会触发通知,即当文件描述符从不可用变为可用时触发一次通知。

  • 适用场景:适用于高性能场景,尤其是在大规模并发连接下,能够减少不必要的轮询。

  • 工作原理:当文件描述符从不可用变为可用时,epoll_wait() 会返回该文件描述符的事件。然而,一旦返回,epoll_wait() 不会再次返回相同的事件,直到文件描述符的状态发生变化(例如,数据被读取或者写入)。

优点:边缘触发模式能够显著减少不必要的通知,适用于处理大量并发连接时,提高系统性能。

缺点:边缘触发模式要求应用程序在处理文件描述符的事件时必须迅速处理完毕(即一次性读取尽可能多的数据)。如果应用程序未及时处理,可能会错过后续的通知。

示例: 假设有一个套接字,且 epoll 采用边缘触发模式。当某个套接字上的数据准备好时,epoll_wait() 会一次性返回该套接字的事件。如果应用程序在第一次通知时未完全读取数据,下次 epoll_wait() 不会返回该事件,直到套接字的状态发生改变(如再次有数据可读)。这要求应用程序必须一次性读取所有数据,否则可能错过后续事件。

这里来总结一下水平触发和边缘触发:

  • 水平触发 (LT): 只要某个条件持续满足(比如,一个套接字上有数据可读),系统就会在你每次检查的时候(例如调用 epoll_wait持续通知你,直到这个条件不再满足(比如,你已经把所有数据都读完了)。它就像一个传感器,只要触发条件(“水平”)存在,它的指示灯就一直亮着

  • 边缘触发 ( ET): 仅当文件描述符的状态发生变化时(比如,从“不可读”变为“可读”,即新数据第一次到达一个之前是空的或已读完的套接字时),系统才会通知你一次。即使你没有完全处理这次事件中的所有数据,对于这批“旧”数据,你也不会收到后续的通知,除非又有新的事件(新的“边缘”)发生。它就像一个传感器,仅在触发条件刚刚发生或改变的那一刻,它才会闪烁一下或发送一个脉冲信号。

一个简单的例子:你的信箱

想象一下你有一个信箱(相当于一个文件描述符,比如套接字),你在等信件(数据)。

  1. 水平触发 (LT) - “小红旗一直竖着”的信箱:

    • 你的信箱上有一个小红旗。当邮递员投递了信件后,他会把小红旗竖起来。

    • 工作方式:

      1. 邮递员送来了 3 封信。小红旗竖起来了

      2. 你看了一眼信箱(类似调用 epoll_wait):你看到小红旗是竖着的(条件满足)。系统通知你。

      3. 你打开信箱,拿走了 1 封信,但因为有事耽搁了,还剩 2 封信在里面。

      4. 过了一会儿,你又看了一眼信箱:小红旗仍然是竖着的(因为里面还有信)。系统又通知了你一次。

      5. 你把剩下的 2 封信也拿走了。现在信箱空了。小红旗放下了

      6. 你再看信箱:小红旗是放下的。没有通知。

    • 核心点: 对于 LT 模式,只要还有数据可读(信箱里还有信),epoll_wait 就会持续提醒你。这种模式比较“宽容”,即使你一次没有处理完所有数据,后续还会收到提醒。

  2. 边缘触发 (ET) - “按门铃”的信箱:

    • 邮递员在每次投递了新的信件后,会按一次门铃。如果你没开门,或者开门只拿了一部分信,他不会因为信箱里还有上次没拿完的信而一直按门铃。

    • 工作方式:

      1. 邮递员送来了 3 封信。他按了一次门铃(状态从“没有新信”变成了“有新信到达”)。

      2. 你听到了门铃声(类似 epoll_wait 返回了事件)。系统通知你。

      3. 你去了信箱,拿走了 1 封信,但因为有事又耽搁了,还剩 2 封信在里面。

      4. 你回去继续等待(再次调用 epoll_wait):对于信箱里那 2 封已经存在的信,门铃不会再次响起。因为“新信到达”这个事件已经发生过了,并且已经通知过你了。

      5. 如果你在第一次听到门铃后没有彻底清空信箱,那么剩下的 2 封信你可能就会“遗漏”,直到邮递员下次送来新的信件并再次按门铃。

      6. 后来,邮递员又送来了 2 封新的信。他又按了一次门铃。这时你去看信箱,会发现里面有 4 封信(之前剩下的 2 封 + 这次新的 2 封)。

    • 核心点: 对于 ET 模式,当数据首次到达(或者说状态变为就绪)时,你会收到一次通知。你必须在收到这次通知后,把所有可用的数据都处理掉(例如,在一个循环里从套接字读取数据,直到 read 返回错误如 EAGAINEWOULDBLOCK,表示暂时没有更多数据了)。如果你不这样做,对于这次事件中剩余未处理的数据,系统不会再次提醒你。

简单来说:

  • LT 就像是你问:“有信吗?” 只要有信,你每次问都会得到“有”的答复。

  • ET 就像是每次有新信来的时候,邮差会喊一声:“来新信啦!”只喊这一次。

3. LT 与 ET 的区别总结

特性水平触发(LT)边缘触发(ET)
事件触发时机只要文件描述符满足条件,都会触发通知只有状态发生变化时触发一次通知
通知的次数只要状态不改变,每次调用 epoll_wait() 都会通知只有状态发生改变时,才会触发一次通知
适用场景适用于大多数应用,处理逻辑简单适用于高并发、高性能应用,需要开发者精心管理事件
数据处理可以逐步读取数据(每次触发都可以继续读取)必须一次性读取完数据,否则可能错过事件

4. 结合代码例子:ET 和 LT 模式的区别

假设你有一个 TCP 服务器,需要处理来自客户端的多个连接请求。下面是两种模式的基本实现方式:

水平触发模式(LT)
// 水平触发模式:每次调用 epoll_wait 时,都会返回所有已就绪的文件描述符
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) {int event_count = epoll_wait(epfd, events, maxevents, timeout);for (int i = 0; i < event_count; i++) {int fd = events[i].data.fd;if (FD_ISSET(fd, &readfds)) {int len = read(fd, buf, BUF_SIZE);if (len == 0) {// 客户端关闭连接close(fd);} else {// 处理数据write(fd, buf, len);}}}
}
边缘触发模式(ET)
// 边缘触发模式:只会通知一次,直到文件描述符状态发生变化
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) {int event_count = epoll_wait(epfd, events, maxevents, timeout);for (int i = 0; i < event_count; i++) {int fd = events[i].data.fd;if (FD_ISSET(fd, &readfds)) {int len;while ((len = read(fd, buf, BUF_SIZE)) > 0) {write(fd, buf, len);}if (len == 0) {// 客户端关闭连接close(fd);}}}
}

LT 模式中,如果某个套接字可读,epoll_wait() 会每次返回这个套接字,直到应用程序处理了所有数据。而在 ET 模式中,如果某个套接字可读,epoll_wait() 只会在数据第一次准备好时通知应用程序,之后直到该套接字的状态发生变化才会再次通知。

5. 总结

  • 水平触发(LT) 更适用于通用应用场景,它的逻辑简单且可靠,每次事件都可以重复触发,直到事件得到处理。

  • 边缘触发(ET) 是一种高性能的 I/O 复用机制,适用于高并发和高吞吐量的应用,它通过减少不必要的通知提高了性能,但要求应用程序必须一次性处理所有就绪数据。

选择 ET 还是 LT 取决于应用场景的需求。如果需要处理高并发连接并且程序能够高效地处理 I/O 事件,ET 是一个好的选择;如果是常规应用并且对性能要求不高,LT 会更简单和安全。

相关文章:

Linux中 I/O 多路复用机制的边缘触发与水平触发

边缘触发&#xff08;Edge Triggered, ET&#xff09;与水平触发&#xff08;Level Triggered, LT&#xff09; Linux中I/O复用机制epoll -CSDN博客 Linux中的 I/O 复用机制 select-CSDN博客 在 epoll 或其他 I/O 多路复用机制中&#xff0c;触发模式是指如何触发文件描述符…...

01-jenkins学习之旅-window-下载-安装

1 jenkins简介 百度百科介绍&#xff1a;Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 [1] Jenkins官网地址 翻译&…...

实战:Dify智能体+Java=自动化运营工具!

我们在运营某个圈子的时候&#xff0c;可能每天都要将这个圈子的“热门新闻”发送到朋友圈或聊天群里&#xff0c;但依靠传统的实现手段非常耗时耗力&#xff0c;我们通常要先收集热门新闻&#xff0c;再组装要新闻内容&#xff0c;再根据内容设计海报等。 那怎么才能简化并高…...

LInux—shell编程

一、Shell 编程核心特性 解释型语言 无需编译&#xff0c;直接由 bash、sh 等解释器逐行执行。 类似 PHP 的解释执行&#xff0c;不同于 C 的编译型。 系统命令集成 可直接调用 Linux 命令&#xff08;如 ls、grep、awk&#xff09;&#xff0c;实现系统管理自动化。 与 C/…...

C++028(变量的作用域)

变量的作用域 作用域就是程序中变量的作用范围。局部变量的作用域是局部的&#xff0c;如函数体内&#xff1b;全局变量的作用域则是整个程序。 我们前面接触过的变量基本都是局部变量&#xff0c;这些变量在函数体内声明&#xff0c;无法被其他函数所使用。函数的形参也属于…...

计算机三级数据库免费题库

1.免费题库链接 链接: https://pan.baidu.com/s/1oNpgWmkFePUrCS6G7tfpUQ?pwdb1hg 提取码: b1hg 2.安装教程...

Unity Shader入门(更新中)

参考书籍&#xff1a;UnityShader入门精要&#xff08;冯乐乐著&#xff09; 参考视频&#xff1a;Bilibili《Unity Shader 入门精要》 写在前面&#xff1a;前置知识需要一些计算机组成原理、线性代数、Unity的基础 这篇记录一些学历过程中的理解和笔记&#xff08;更新中&…...

NSSCTF-[陇剑杯 2021]webshell(问6)

下载得到pcap文件 放到Wireshark进行分析 先过滤http contains "1.php"&&http.request.method"POST" 追踪HTTP流 将后面的进行解码 得到flag NSSCTF{192.168.239.123}...

vscode git push 记录

1.先在git上建一个仓库 2.在vscode上登录同一账号 配置好ssh 直接使用 git remote add origin gitgithub.com:18053923230/aiRecipe.git (base) PS D:\gitee\cookbook> git push -u origin master Enter passphrase for key /c/Users/Administrator/.ssh/id_ed25519: …...

前端性能优化方案

一、HTML优化策略​ 1、减少DOM层级​​ <!-- 避免 --><div><div><div><p>内容</p></div></div></div><!-- 推荐 --><div class"content">内容</div> 原因&#xff1a;嵌套过深会增加渲染…...

前端vscode学习

1.安装python 打开Python官网&#xff1a;Welcome to Python.org 一定要点PATH&#xff0c;要不然要自己设 点击install now,就自动安装了 键盘winR 输入cmd 点击确定 输入python&#xff0c;回车 显示这样就是安装成功了 2.安装vscode 2.1下载软件 2.2安装中文 2.2.1当安…...

python实现web请求与回复

一、作为客户端发送请求&#xff08;使用requests库&#xff09; import requests # 发送GET请求 response requests.get("https://api.example.com/data") print("GET响应状态码:", response.status_code) print("GET响应内容:", response.…...

Python实现Web请求与响应

目录 一、Web 请求与响应基础 &#xff08;一&#xff09;Web 请求与响应的定义与组成 &#xff08;二&#xff09;HTTP 协议概述 &#xff08;三&#xff09;常见的 HTTP 状态码 二、Python 的 requests 库 &#xff08;一&#xff09;安装 requests 库 &#xff08;二…...

AI与.NET技术实操系列(六):实现图像分类模型的部署与调用

引言 人工智能&#xff08;AI&#xff09;技术的迅猛发展推动了各行各业的数字化转型。图像分类&#xff0c;作为计算机视觉领域的核心技术之一&#xff0c;能够让机器自动识别图像中的物体、场景或特征&#xff0c;已广泛应用于医疗诊断、安防监控、自动驾驶和电子商务等领域…...

PP-YOLOE-SOD学习笔记1

项目&#xff1a;基于PP-YOLOE-SOD的无人机航拍图像检测案例全流程实操 - 飞桨AI Studio星河社区 一、安装环境 先准备新环境py>3.9 1.先cd到源代码的根目录下 2.pip install -r requirements.txt 3.python setup.py install 这一步需要看自己的GPU情况&#xff0c;去飞浆…...

Axure系统原型设计列表版方案

列表页面是众多系统的核心组成部分&#xff0c;承担着数据呈现与基础交互的重要任务。一个优秀的列表版设计&#xff0c;能够极大提升用户获取信息的效率&#xff0c;优化操作体验。下面&#xff0c;我们将结合一系列精心设计的列表版方案图片&#xff0c;深入探讨如何打造出实…...

腾讯音乐二面

ReentrantLock 的源码及实现 ReentrantLock 是 Java 中的一种可重入的互斥锁。它通过 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;框架来实现。AQS 使用一个 FIFO 队列来管理获取锁的线程。ReentrantLock 有公平锁和非公平锁两种模式。非公平锁&#xff1a;当线程尝…...

服务器操作系统调优内核参数(方便查询)

fs.aio-max-nr1048576 #此参数限制并发未完成的异步请求数目&#xff0c;应该设置避免I/O子系统故障 fs.file-max1048575 #该参数决定了系统中所允许的文件句柄最大数目&#xff0c;文件句柄设置代表linux系统中可以打开的文件的数量 fs.inotify.max_user_watches8192000 #表…...

MySQL5.7导入MySQL8.0的文件不成功

文章目录 问题检查原因及解决方法原因解决办法 问题 检查 检查自己的mysql版本自己检查&#xff0c;搜索“0900_ai_ci”&#xff0c;如果能搜索到&#xff0c;说明这个sql文件是从8的版本导出的 原因及解决方法 原因 MySQL 8.0默认使用utf8mb4字符集和utf8mb4_0900_ai_ci排…...

vscode连接WSL卡住

原因&#xff1a;打开防火墙 解决&#xff1a; 使用sudo ufw disable关闭防火墙...

springAI调用deepseek模型使用硅基流动api的配置信息

查看springai的官方文档&#xff0c;调用deepseek的格式如下&#xff1a; spring.ai.deepseek.api-key${your-api-key} spring.ai.deepseek.chat.options.modeldeepseek-chat spring.ai.deepseek.chat.options.temperature0.8 但是硅基流动的格式不是这样&#xff0c;这个伞兵…...

symbol【ES6】

你一闭眼世界就黑了&#xff0c;你不是主角是什么&#xff1f; 目录 什么是Symbol&#xff1f;‌Symbol特点‌&#xff1a;创建方法&#xff1a;注意点&#xff1a;不能进行运算&#xff1a;显示调用toString() --没有意义隐式转换boolean 如果属性名冲突了怎么办&#xff1f;o…...

如何用数据可视化提升你的决策力?

在数字化浪潮席卷全球的当下&#xff0c;数据已然成为企业和组织发展的核心资产。然而&#xff0c;单纯的数据堆积犹如未经雕琢的璞玉&#xff0c;难以直接为决策提供清晰有力的支持。数据可视化作为一种强大的工具&#xff0c;能够将海量、复杂的数据转化为直观、易懂的图形、…...

【C++】vector容器实现

目录 一、vector的成员变量 二、vector手动实现 &#xff08;1&#xff09;构造 &#xff08;2&#xff09;析构 &#xff08;3&#xff09;尾插 &#xff08;4&#xff09;扩容 &#xff08;5&#xff09;[ ]运算符重载 5.1 迭代器的实现&#xff1a; &#xff08;6&…...

C语言求1到n的和(附带源码和解析)

在C语言中&#xff0c;使用 for 循环求 1 到 n 的和是一个常见的编程任务。这个任务不仅可以帮助初学者理解循环的基本概念&#xff0c;还能培养他们的逻辑思维能力。 要计算 1 到 n 的和&#xff0c;我们需要创建一个循环&#xff0c;从 1 开始&#xff0c;一直累加到 n。for…...

springboot3+vue3融合项目实战-大事件文章管理系统-文章分类也表查询(条件分页)

在pojo实体类中增加pagebean实体类 Data NoArgsConstructor AllArgsConstructor public class PageBean <T>{private Long total;//总条数private List<T> items;//当前页数据集合 }articlecontroller增加代码 GetMappingpublic Result<PageBean<Article&g…...

java中定时任务的实现及使用场景

在 Java 需要中&#xff0c;定时任务的实现方式有单线程模型的 Timer 类、线程池定时任务的 ScheduleExecutorService、spring 框架提供的注解Schedule 定时任务&#xff0c;第三个框架定时任务比如 XX-Job,Quartz 等。 Java 任务调度组件对比与使用指南 一、核心功能对比 特…...

使用 OpenCV 实现哈哈镜效果

在计算机视觉和图像处理领域&#xff0c;OpenCV 提供了非常强大的图像几何变换能力&#xff0c;不仅可以用于纠正图像&#xff0c;还能制造各种“有趣”的视觉效果。今天&#xff0c;我们就来实现一个经典的“哈哈镜”效果&#xff0c;让图像像在游乐园里一样被拉伸、压缩、扭曲…...

【Java高阶面经:微服务篇】9.微服务高可用全攻略:从架构设计到自动容灾

一、架构层:构建抗故障的分布式基石 1.1 多维度冗余设计 1.1.1 跨可用区部署策略 # Kubernetes跨可用区反亲和性配置 apiVersion: apps/v1 kind: Deployment metadata:name: product-service spec:replicas: 3template:spec:affinity:podAntiAffinity:requiredDuringSchedu…...

读一本书第一遍是快读还是细读?

在时间充足且计划对重要书籍进行多遍阅读的前提下&#xff0c;第一遍阅读的策略可以结合**「快读搭建框架」与「标记重点」**&#xff0c;为后续细读奠定基础。以下是具体建议及操作逻辑&#xff1a; 一、第一遍&#xff1a;快读为主&#xff0c;目标是「建立全局认知」 1. 快…...

COMPUTEX 2025 | 广和通5G AI MiFi解决方案助力移动宽带终端迈向AI新未来

随着5G与AI不断融合&#xff0c;稳定高速、智能的移动网络已成为商务、旅行、户外作业等场景的刚需。广和通5G AI MiFi方案凭借领先技术与创新设计&#xff0c;重新定义5G移动网络体验。 广和通5G AI MiFi 方案搭载高通 4nm制程QCM4490平台&#xff0c;融合手机级超低功耗技术…...

JAVA批量发送邮件(含excel内容)

EmailSenderHtmlV1 是读取配置文件《批量发送邮件.xlsx》&#xff0c;配置sheet获取 发件人邮箱 邮箱账号 口令&#xff0c;发送excel数据sheet获取收件人邮箱 抄送人邮箱 邮件标题 第N行开始(N>1,N0默认表头) 第M行结束(M>1,M0默认表头) 附件文件夹…...

MyBatis 关联映射深度解析:_association_ 与 _collection_ 实战教程

一、核心概念与适用场景 在 MyBatis 中,<association> 和 <collection> 用于处理对象间的关联关系,简化复杂查询到对象结构的映射。 标签用途对应关系示例场景<association>映射 单个嵌套对象(“有一个”关系)一对一、多对一员工 (Emp) 属于一个部门 (D…...

NSSCTF [watevrCTF 2019]Wat-sql

90.[watevrCTF 2019]Wat-sql(逻辑漏洞) [watevrCTF 2019]Wat-sql (1) 1.准备 motalymotaly-VMware-Virtual-Platform:~$ file sql sql: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linu…...

C++ 前缀和数组

一. 一维数组前缀和 1.1. 定义 前缀和算法通过预处理数组&#xff0c;计算从起始位置到每个位置的和&#xff0c;生成一个新的数组&#xff08;前缀和数组&#xff09;。利用该数组&#xff0c;可以快速计算任意区间的和&#xff0c;快速求出数组中某一段连续区间的和。 1.2. …...

免费使用GPU的探索笔记

多种有免费时长的平台 https://www.cnblogs.com/java-note/p/18760386 Kaggle免费使用GPU的探索 https://www.kaggle.com/ 注册Kaggle账号 访问Kaggle官网&#xff0c;使用邮箱注册账号。 发现gpu都是灰色的 返回home&#xff0c;右上角的头像点开 验证手机号 再次code-you…...

【css】 flex布局基本知识

Flexible Box 模型&#xff0c;是一种一维的布局模型。一个 flexbox 一次只能处理一个维度上的元素布局&#xff0c;一行或者一列。 轴线 flex 属性与主轴和交叉轴有关&#xff0c;通过flex-direction定义 主轴由 flex-direction 定义&#xff0c;可以取 4 个值&#xff1a;…...

3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解

SfM → Point-NeRF → 3D Gaussian Splatting &#x1f7e6;SfM Structure-from-Motion&#xff08;运动恢复结构&#xff0c;简称 SfM&#xff09;是一种计算机视觉技术&#xff0c;可以&#xff1a; 利用多张从不同角度拍摄的图像&#xff0c;恢复出场景的三维结构和相机的…...

RestTemplate 发送的字段第二个大写字母变成小写的问题探究

在使用RestTemplate 发送http 请求的时候&#xff0c;发现nDecisonVar 转换成了ndecisonVar ,但是打印日志用fastjson 打印的没有问题&#xff0c;换成jackson 打印就有问题。因为RestTemplate 默认使用的jackson 作为json 序列化方式&#xff0c;导致的问题&#xff0c;但是为…...

第二次中医知识问答微调

由于昨天微调效果并不理想&#xff0c;因此更换数据集和参数进行重新进行了微调 本次微调参数如下&#xff1a; llamafactory-cli train \ --stage sft \ --do_train True \ --model_name_or_path /home/qhyz/zxy/LLaMA-Factory/model \ --preprocessing_num_workers 16 \ --…...

Linux查 ssh端口号和服务状态

一、检查SSH服务运行状态 通过进程查看命令验证服务是否启动&#xff1a; ps -ef | grep ssh当输出包含sshd进程时&#xff0c;表示SSH服务正在运行。示例输出&#xff1a; root 1234 1 0 10:00 ? 00:00:00 /usr/sbin/sshd二、查看服务监听端口 使用网络…...

C++ 11(1):

C11的发展史&#xff1a; C11中的{}&#xff1a; 看这个图片&#xff0c;我们的C11是所有的对象都可以使用{}来进行初始化&#xff0c;之前我们的int类型的数据要使用赋值符号来进行初始化&#xff0c;现在的话我们可以直接使用花括号来进行&#xff0c;并且连赋值符号都可以去…...

数据结构(4)线性表-链表-双链表

一、链表的分类 迟来的分类&#xff0c;主要如果在学习单链表前去讲分类&#xff0c;可能就云里雾里的&#xff0c;所以放在讲完单链表后讲。 划分链表的标准如下&#xff1a; 有没有头结点、指针的方向、循环与否 头结点就是一个占位结点&#xff0c;也被叫做哨兵位&#x…...

Spring Framework 的 spring-core 和 Spring Security 兼容版本

Spring Framework 的 spring-core 和 Spring Security 兼容版本 Spring Framework 的 spring-core 和 Spring Security 的版本需要保持兼容性&#xff0c;尤其是在旧版本&#xff08;如 Spring 4.x&#xff09;中。以下是它们的版本对应关系&#xff1a; Spring 4.x (spring-c…...

《国家职业教育平台:点亮职业教育新灯塔》

职教新航标&#xff1a;平台诞生记 国家职业教育智慧教育平台 在科技飞速发展的今天&#xff0c;数字化浪潮席卷全球&#xff0c;深刻地改变着我们生活的方方面面&#xff0c;教育领域也不例外。随着信息技术的不断进步&#xff0c;教育数字化已成为当今世界教育发展的重要趋势…...

Java多线程深度解析:从核心机制到高阶实战

Java多线程深度解析&#xff1a;从核心机制到高阶实战 摘要&#xff1a;本文系统解析Java多线程全体系知识&#xff0c;涵盖线程实现原理、并发工具实战、锁机制底层实现、线程池参数调优策略&#xff0c;并提供20可运行代码片段。附内存模型原理与性能优化指南。 目录 线程基…...

大量程粗糙度轮廓仪适用于哪些材质和表面?

大量程粗糙度轮廓仪是一种能够在广泛的测量范围内对工件表面进行粗糙度分析的精密仪器。它通常采用接触式或非接触式传感器&#xff0c;通过对工件表面的扫描&#xff0c;捕捉表面微观的起伏和波动&#xff0c;从而获取粗糙度数据。该仪器不仅能测量微小的表面细节&#xff0c;…...

NC028NQ472美光固态颗粒NQ484NQ485

深度解析&#xff1a;NC028NQ472、NQ484与NQ485美光固态颗粒 技术架构解析&#xff1a;堆叠式存储与算法优化 美光NC028NQ472、NQ484及NQ485系列固态颗粒均采用自研3D TLC NAND闪存技术&#xff0c;其核心架构通过垂直堆叠存储单元实现高密度集成。以NQ472为例&#xff0c;采…...

Cursor神一样的存在,核心能力codebase是如何工作的?

最近宣布达到 3 亿美元年度经常性收入&#xff0c;已经成为vibe coding标配。核心能力来自于Codebase。根据官方说法&#xff0c;codebase实现是依赖使用 Merkle 树来快速索引代码。但是没有竞品模仿这种方法。 Merkle是如何工作的那&#xff1f; Merkle 树简单解释 Merkle …...

python代码绘制某只股票最近90天的K线图、均线、量能图

运行代码&#xff0c;要求输入股票代码和名称&#xff0c;其他参数可省略 import akshare as ak import matplotlib.pyplot as plt import pandas as pd import mplfinance as mpf import matplotlib.dates as mdates import numpy as np import os from datetime import date…...