IO基础-IO多路复用基础

news/2024/5/17 12:51:13

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 多路复用!


http://www.mrgr.cn/p/50000700

相关文章

HarmonyOS实战开发-自定义通知角标、如何设定应用的桌面图标角标的功能。

介绍 本示例主要展示了设定应用的桌面图标角标的功能,使用ohos.notificationManager 接口,进行桌面角标的设置,通知的发送,获取等。 效果预览 使用说明 在使用本应用时,需安装并启动仿桌面应用;在主界面…

Linux系统一键安装DataEase结合内网穿透实现公网访问本地WebUI界面

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

GPT国内怎么用

2022年11月,OpenAI发布了ChatGPT,这标志着大型语言模型在自然语言处理领域迈出了巨大的一步。ChatGPT不仅在生成文本方面表现出了惊人的流畅度和连贯性,更为人工智能应用开启了全新的可能性。 ChatGPT的推出促进了人工智能技术在多个领域的广…

【GUI软件】小红书按关键词采集笔记详情,支持多个关键词,含笔记正文、转评赞藏等,爬了1024w条!

小红书采集软件,根据关键词自动采集笔记详情。一、背景介绍 1.1 爬取目标 熟悉我的小伙伴都了解,我之前开发过2款软件:【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取! 【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持多笔记同时采集!现在…

提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件

法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼,以及仲裁案件,精确的法律文书撰写对于案件的成功至关重要。然而,这一过程往往既耗时又复杂,尤其是在处理复杂的案情和面对当事人难以理解…

图片批量高效管理,支持批量转换图片格式并按比例进行放大150%,高效掌握图片

在这个数字化时代,图片已经成为我们生活和工作中不可或缺的一部分。然而,面对海量的图片文件,如何高效地进行管理、编辑和优化,成为了摆在我们面前的一大难题。现在,一款全新的图片批量管理工具来了,它能够…

进程控制

linux下进程控制,等待,退出,fork()函数,fork返回id的细节目录1.fork函数1.1如何理解fork函数有两个返回值问题1.2如何理解fork给父进程返回自己的pid,自己返回01.3如何理解同一个id值,有两个不同的值2.进程终止2.1进程退出码2.2进程退出2.2.1进程常见退出办法2.2.3exit()…

React脚手架的搭建与使用

React脚手架是开发现代Web应用的必备,其充分利用Webpack、Babel、ESlint等工具辅助项目的开发,当然这些工具也无需手动配置即可使用,脚手架的意义更多的是关注的是业务而不是工具的配置;项目的整体技术架构为:react w…

JS 中 reduce()方法及使用详解

reduce()方法可以搞定的东西特别多,就是循环遍历能做的,reduce都可以做,比如数组求和、数组求积、统计数组中元素出现的次数、数组去重等等。 reduce() 方法对数组中的每个元素执行一个由您提供的reduce函数(依次执行),将其结果汇总为单个返回值。 1、语法介绍// arr.reduc…

探索Java世界中的七大排序算法(上)

文章目录 排序的概念直接插入排序希尔排序( 缩小增量排序)选择排序堆排序冒泡排序 在计算机科学中,排序算法是一类重要的算法,它们用于将一组元素按照一定的顺序进行排列。在Java编程中,我们经常需要对数组或集合进行排序操作。本文将介绍Jav…

高并发(AQS)

AQS 抽象的队列同步器框架,主要通过程序来构建锁和同步器AQS 抽象的队列同步器框架,主要通过程序来构建锁和同步器 AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器,它和Java的Synchronized作用和一样,用来同步加锁; 特性对比ReentrantLock …

JAVA基础-流程控制、字符串

一、java基础 1、java主类结构 package com.study.again001; 包名public class helloword { 类名 static String s1 = "1"; 静态成员变量 public static void main(String[] args) { main方法 String s2 = "2"; 局部变量 …

C到二进制概述

此帖是记录视频内容,防止后续自己遗忘 一、预处理 1、库文件 预处理等于一个文本粘贴过程,编译后把库文件展开,展开本质也为粘贴内容include 本质是在其中特定路径搜索(usr/include...),而#include "xxx"是在当前路径下进行搜索 。其中#include" "高于…

Qt6连接MySQL

Qt6连接MySQL Qt6编译MySQL的过程太变态了,MinGW和MSVC都很费劲。 主要参考qt6.5.0MySQL驱动手动编译以及数据库连接详细教程以及注意事项附资源链接,这篇文章堪称保姆级教程,写的十分详细。 笔者这里踩了个坑,在按照上文中的过…

AliyunCTF 2024 - BadApple

文章目录 前言环境搭建漏洞分析漏洞利用参考 前言 本文首发于看雪论坛 https://bbs.kanxue.com/thread-281291.htm 依稀记得那晚被阿里CTF支配的恐惧,今年的阿里CTF笔者就做了一道签到PWN题,当时也是下定决心要学习 jsc pwn 然后复现这道 BadApple 题目…

UI——数据表和UI绑定

目的创建数据表 创建UI控件 玩家角色蓝图UI按键逻辑 UI与数据表绑定1.创建数据表2.创建UI控件3.玩家角色蓝图UI按键逻辑4.UI与数据表绑定本文来自博客园,作者:荒坂株式会社,博客内容均属学习笔记,只做交流之用

MBR20200FCT-ASEMI肖特基二极管MBR20200FCT

MBR20200FCT-ASEMI肖特基二极管MBR20200FCT编辑:ll MBR20200FCT-ASEMI肖特基二极管MBR20200FCT 型号:MBR20200FCT 品牌:ASEMI 封装:TO-220 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):200V 最大正向电压(VF):0.90V 工作温度:-65C~175C 反向恢复时间:…

ELK-Kibana 部署

目录 一、在 node1 节点上操作 1.1.安装 Kibana 1.2.设置 Kibana 的主配置文件 1.3.启动 Kibana 服务 1.4.验证 Kibana 1.5.将 Apache 服务器的日志(访问的、错误的)添加到 ES 并通过 Kibana 显示 1.6. 浏览器访问 二、部署FilebeatELK&…

App测试中,强制等待和隐式等待谁更强?

简介 添加等待是为了确保自动化脚本在执行过程中与应用程序之间的同步和稳定性。 应用程序的响应时间是不确定的,可能存在网络延迟、加载时间、动画效果等因素。如果在执行自动化脚本时没有适当的等待机制,脚本可能会在应用程序还未完成相应操作或加载完成之前继续执行下一步…

Spring AOP的实现方式与原理

目录 认识IOC与AOP AOP的实现方式 Aspect注解实现AOP 自定义注解实现AOP Spring AOP原理 代理模式 静态代理和动态代理 JDK动态代理 CGLIB动态代理 Spring AOP实现的哪种代理 认识IOC与AOP IOC又称为控制反转,也就是控制权发生了反转.在传统的程序中,我们是需要自己…