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

IO基础-IO多路复用基础

Java的Selector封装了底层epoll和poll的API,可以通过指定如下参数来调用执行的内核调用, 在Linux平台,如果指定

-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider 则底层调用poll,

-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider 或者不指定,则底层调用epoll。

一、I/O多路复⽤比较

I/O多路复⽤与传统的多线程/多进程模型相⽐,I/O多路复⽤的最⼤优势是系统开销⼩,系统不需要创建新的额外进程或者线程,也不需要维护这些线程和进程的运⾏行,降低了系统的维护⼯作量,节省了系统的资源。

二、多路复用IO模型的实践方式对比(更准确的说Selector实现方式)

1、数据结构存储区别

        select 使⽤用fd_set(bitmap数组保存⽂文件描述符)默认1024

        poll 使⽤pollfd结构(链表保存⽂件描述符) fd打开数量最大是系统上限。

        epoll 使⽤用红黑树和双向链表保存⽂件描述符 fd打开数量最⼤是系统上限。

2、轮询的⽅方式

        select 遍历连接总数时间复杂度为O(n)

        poll 遍历连接总数时间复杂度为O(n)

        epoll最⼤的优点就在于它只管你“活跃”的连接,fd就绪后进行回调。时间复杂度为O(1)

3、⽤用户态和内核态切换

        select、poll 用户态和内核态切换,需要fd来回拷⻉。

        epoll 使⽤mmap加速内核与内存⽤户空间的消息传递

4、epoll的高性能原因:

        1、epoll使用了红黑树来保存需要监听的文件描述符事件,epoll_ctl增删改操作快速。

        2、epoll不需要遍历就能获取就绪fd,直接返回就绪链表即可。

        3、linux2.6 之后使用了mmap技术,数据不在需要从内核复制到用户空间,零拷贝。

        思考:是不是解决了C10K问题。解决了,还可以进行优化吗?

        可以使用 Reactor模式解决阻塞点。

参考:这次答应我,一举拿下 I/O 多路复用!

相关文章:

IO基础-IO多路复用基础

Java的Selector封装了底层epoll和poll的API,可以通过指定如下参数来调用执行的内核调用, 在Linux平台,如果指定 -Djava.nio.channels.spi.SelectorProvidersun.nio.ch.PollSelectorProvider 则底层调用poll, -Djava.nio.channels.spi.Selec…...

Python机器学习项目开发实战:如何进行人脸识别

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程: Python机器学习项目开发实战_人脸识别_编程案例解析实例详解课程教程.pdf 人脸识别是一个复杂但…...

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色,因才施用,需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好,而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才,才能高效配合…...

Real3DPortrait照片对口型,数字人,音频/视频驱动数字人

先看效果 上传一张图片和一段音频,照片如下: 合成后效果如下: 照片对口型-音频驱动 支持音频驱动和视频驱动,视频可以使照片有参照视频中的口型和和动作。 项目地址 https://github.com/yerfor/Real3DPortrait 我的环境 win…...

Stable Diffusion之Ubuntu下部署

1、安装conda环境 conda create -n webui python3.10.6 2、激活环境 每次使用都要激活 conda activate webui 注意开始位置的变换 关闭环境 conda deactivate webui 3、离线下载SD 代码 https://github.com/AUTOMATIC1111/stable-diffusion-webui https://github.com/Stabilit…...

LeetCode-15-三数之和问题

题目说明 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 给定数组 nums [-1, 0,…...

springboot2集成东方通tongweb嵌入式版

由于最近项目需要国产化信创改造,引入东方通tongweb 联系东方通厂家 ,将依赖导入到maven仓库,并获取嵌入式版license文件修改pom.xml,引入依赖,注意springboot版本,这里以springboot2举例 首先移除springb…...

【二分查找】Leetcode 33. 搜索旋转排序数组【中等】

搜索旋转排序数组 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], num…...

Zephyr Windows开发环境搭建

Zephyr 如果有错误或未及时更新&#xff0c;请以官网文档为主 官网&#xff1a;https://docs.zephyrproject.org/latest/develop/getting_started/index.htm 下载安装 Chocolatey 这是一个类似于在Linux系统下 yum 和 apt 那样的包管理器 官网&#xff1a;https://chocolat…...

如何安全地设置MySQL数据库的IP白名单

设置MySQL数据库的IP白名单是一种关键的安全措施&#xff0c;可以确保只有来自特定IP地址的请求被允许访问数据库服务器。这里是如何安全地配置这些设置的分步指南。 步骤1: 登录到MySQL服务器 首先&#xff0c;使用管理员权限登录到你的MySQL服务器。如果你使用的是命令行&a…...

Chatgpt掘金之旅—有爱AI商业实战篇|品牌故事业务|(十六)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在品牌故事业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随…...

为什么要部署IP SSL证书?怎么申请?

我们需要知道什么是IP SSL证书。SSL&#xff0c;全称为Secure Sockets Layer&#xff0c;即安全套接层&#xff0c;是为网络通信提供安全及数据完整性的一种安全协议。而IP SSL证书就是基于SSL协议的一种证书&#xff0c;它能够为网站和用户的数据传输提供加密处理&#xff0c;…...

最新免费 ChatGPT、GPTs、AI换脸(Suno-AI音乐生成大模型)

&#x1f525;博客主页&#xff1a;只恨天高 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容…...

前端的未来已然到来

随着整个软件行业正逐渐转向以打包、托管与抽象解决方案为主体的新形态&#xff0c;后端与基础设施带来的麻烦正越来越少&#xff0c;而立足堆栈顶部的前端工程师开始成为施展空间最大的时代宠儿。甚至不只是他们&#xff0c;如今无论是前端、后端还是运维开发者&#xff0c;他…...

Open CASCADE学习|gp_XYZ与gp_Mat

gp_XYZ和gp_Mat是Open CASCADE Technology (OCCT)中的类&#xff0c;用于处理3D几何和变换。 gp_XYZ gp_XYZ类代表了一个三维空间中的点或向量。它通过三个坐标值&#xff08;X, Y, Z&#xff09;来定义位置或方向。这个类提供了多种操作&#xff0c;比如计算两点之间的距离、…...

BMS绝缘电阻检测原理【转】

...

优秀的测试开发工程师需要掌握哪些技能?

科技的发展与网络技术的广泛应用&#xff0c;让测试开发已成为软件开发过程中不可或缺的一环。测试开发工程师是为确保软件程序的质量和稳定性而工作的专业人士。但是成为一名合格的测试开发工程师需要具备哪些技能呢&#xff1f;一起来看看吧&#xff01; 优秀的测试开发工程…...

思维树(Tree of Thoughts)的概念

思维树&#xff08;Tree of Thoughts&#xff0c;简称ToT&#xff09;是一种利用大型语言模型进行问题解决的框架。这个框架借鉴了人类认知研究的成果&#xff0c;特别是关于人类在做决策时的两种思维方式&#xff1a;快速、自动、无意识的模式&#xff08;称为“系统1”&#…...

探索设计模式的魅力:抽象工厂模式的艺术

个人主页: danci_ &#x1f525;系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自文章&#xff1a;探索设计模式的魅力&#xff1a;抽象工厂模式的艺术 抽象工厂模式&…...

果园系统养殖游戏喂养偷菜种植浇水养成小程序

装扮 通过购买装扮场景切换不同的农场风格 土地升级 通过特定的材料对土地和房屋进行升级 日志 记录道具的使用数量及金币农作物的收入情况 幸运转盘 可用金币进行抽奖 宝箱开启 获得宝箱后可以通过金币开启 每日签到 每日签到获得奖励 系统公告 可以第一时间知道游戏的更新和…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...