Netty之I/O模型

news2024/11/24 14:39:51

UNIX提供的5种IO模型:

  • 阻塞模型
    在这里插入图片描述

  • 阻塞IO模型:
    在这里插入图片描述

  • IO复用模型:
    在这里插入图片描述

  • 信号驱动IO模型:
    在这里插入图片描述

在这里插入图片描述

对于五种IO模型我这里用自己的白话再复述一遍,加深理解,如果要看权威的解释可以自己去看《Netty权威指南》。

阻塞IO

  1. 进程:那老头,有数据要我处理没有。
  2. 内核:大爷,现在没有数据,我现在就去准备,您老先等等。
  3. 内核把数据准备好,并从内核复制到用户控件。
  4. 内核:大爷,有数据了,给您,您慢走。

非阻塞IO

  1. 进程:那哥们儿,有数据要处理不?
  2. 内核:暂时没有数据。
  3. 进程:好勒,我先干别的去了。
  4. 进行通过轮询的方式不断问内核有没有要处理的数据,直到。
  5. 进程:哥们儿,有数据要处理不?
  6. 内核:挨千刀的,一直问一直问,数据在这里,拿起爬。
  7. 进程:好勒,我先拿走处理了,等下我还要来问哦。

IO复用

  1. 进程:那哥们儿,我要A/B/C这些数据,有没得?
  2. 内核:都没有,你先等着。
  3. 内核去准备数据,直到其中某个数据准备好。
  4. 内核:小子,数据A准备好了,可以取了。
  5. 进程:哦,数据A有了哈,那谁,可以拿走了,我继续等等剩下的数据。

信号驱动IO

  1. 进程:兄弟,我要数据A,这是我电话,有数据了给我打电话。
  2. 内核准备数据,直到数据准备好。
  3. 内核:有数据了,需要的时候来取嘛。
  4. 进程:嘿,兄弟,又见面了,数据给我吧。
  5. 内核:给你了,拿走吧。

异步IO

  1. 进程:兄弟,我要数据A,有了麻烦给我邮寄过来,我先回去了。
  2. 内核准备数据,直到数据准备好,并复制到用户缓冲区。
  3. 内核:给进程打电话说数据已经给你邮寄过去了,你签收一下。

epoll

目前支持IO多路复用的系统调用有select、pselect、poll、epoll。epoll相对select做了以下改进:

  1. 支持一个进程打开的socket描述符(FD)不受限制(仅受限于操作系统的最大文件句柄数)。

    select单个进程所能打开的FD受限制与FD_SIZE,默认值是1024
    1GB内存的机器上大约是10万个句柄,可以通过cat/proc/sys/fs/file-max查看

  2. IO效率不会随着FD数目的增加而线性下降。

    select/poll每次调用都会线性的扫描全部的socket集合,导致效率呈线性下降。
    epoll是根据每个fd上面的callback函数实现的。那么只有“活跃”的socket才会去主动调用callback函数,其他idle状态则不会。

  3. 使用mmap加速内核与用户空间的消息传递

mmap:一种内存映射文件的方法。
epoll使用你mmap让内核与用户空间共享同一块内存

  1. epoll的API更简单

IO发展史

  1. JDK1.0到JDK1.3,IO库非常原始。
  2. JDK1.4 NIO以JSR-51的身份正式随JDK发布。新增了java.nio包,提供了进行异步IO的开发API和类库。
  3. JDK1.7 进行了NIO升级,被称为NIO2.0.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】树状数组数据结构

文章目录Part.I 预备知识Chap.I 一些前提和概念Chap.II lowbit 函数Part.II 树状数组Chap.I 树状数组的思想Chap.II 树状数组的构造Part.III 树状数组的应用Chap.I LeetCode: 2426. 满足不等式的数对数目Sec.I 题目描述与分析Sec.II 代码实现Chap.II LeetCode: 51. 数组中的逆序…

计算机网络-网络层(ARP协议,DHCP协议,ICMP协议)

文章目录1. ARP协议2. DHCP协议3. ICMP协议1. ARP协议 首先数据在从网络层向下传递到数据链路层,在数据链路层中,要给报文封装源MAC地址和目的MAC地址。 其中获取目的MAC地址就是通过ARP协议 首先:每台主机都有一个ARP高速缓存&#xff08…

【VC++】字符串详解窗口第一个windows程序

注:最后有面试挑战,看看自己掌握了吗 文章目录系统调用顺序对比怎样避免确实动态链接库基本知识类型列表指针类型匈牙利标记法字符串详解Unicode 和 ANSI 函数TCHARs窗口WinMain我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻&#xf…

微信小程序开发(超详细保姆式教程)

介绍: 微信里面app,16年推出 竞品:支付宝小程序,钉钉,美团,头条,抖音qq小程序 优点 1,在微信里面自由分享,2,不用下载app,3,能快速的开发&#xf…

【MySQL】如何把Windows上的MySQL数据库迁移到Linux服务器上

目录1. 前言2. 物理备份与逻辑备份3. mysqldump实现逻辑备份4. 逻辑恢复1. 前言 最近在学黑马的《瑞吉外卖》,前期的基础版本一致在 Windows 电脑上开发,包括 MySQL 数据库也是安装在 Windows 电脑上。最近才学到优化篇,安装了 Linux 虚拟机…

【成为红帽工程师】第二天 ssh远程连接服务器

目录 一、远程连接服务器 二、连接加密技术 三、ssh远程连接服务 四、sftp用法介绍 五、相关实验 一、远程连接服务器 (一)什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机…

2022年最新山东交安安全员模拟真题及答案

百分百题库提供交安安全员考试试题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 43.危险性较大工程专项施工方案需要论证的,应当由建设单位组织召开专家论证会。 答案&#…

计算机毕业设计SSM财务管理系统【附源码数据库】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

计算机毕业设计SSM城市智能公交系统【附源码数据库】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MyBatis(4)---多表查询

多表查询: 一对一:一篇博客对应着一个作者 一对多:一个作者对应着多篇博客 ResultMap和ResultType的区别: 1)字段映射不同:resultType适用于数据库字段名和实体类的名字是相同的,但是假设实体类的名字叫做username,但是数据库的名字是name,这…

MyBatis(3)

我们在进行指定ID进行删除的时候还可以加上一个属性:表示要传递的参数的类型是啥 <delete id"Delete" parameterType"java.lang.Integer">delete from user where userID#{userID}</delete> 我们现在先实现一个场景----我们来进行查询一下User…

【毕业设计】大数据共享单车数据分析系统 - python

文章目录0 前言1 项目背景2 项目分析思维导图3 项目分析具体步骤3.1 读取数据3.2 数据分析3.1.1 数据预处理——每日使用量分析3.1.2 连续7天的单日使用分析结论3.1.3 数据预处理——每日不同时间段的使用量分析3.1.4 每日不同时间段使用量分析结论3.1.5 数据预处理——骑行距离…

【C++】智能指针

一、资源的管理 RAII:Resource Acquisition Is Initialization的简称&#xff0c;其翻译过来就是“资源获取即初始化”&#xff0c;即在构造函数中申请分配资源&#xff0c;在析构函数中释放资源&#xff0c;它是C语言中的一种管理资源、避免泄漏的良好方法。 C语言的机制保证…

python快速实现简易超级玛丽小游戏

《超级玛丽》是一款超级马里奥全明星的同人作品&#xff0c;也是任天堂公司出品的著名横版游戏。 《超级马里奥》是一款经典的像素冒险过关游戏。最早在红白机上推出&#xff0c;有多款后续作品&#xff0c;迄今多个版本合共销量已突破4000万套。其中的主角马里奥、路易、碧琪…

[附源码]计算机毕业设计JAVAjsp闲置物品线上交易系统

[附源码]计算机毕业设计JAVAjsp闲置物品线上交易系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM …

tensor和numpy相互转换

tensor转成numpy b a.numpy()import torcha torch.arange(5) b a.numpy() print(a) print(type(a)) print(b) print(type(b))numpy转成tensor b torch.tensor(a)import torch import numpy as npa np.ones(5) b torch.tensor(a) print(a) print(type(a)) print(b) prin…

Spring Cloud框架(原生Hoxton版本与Spring Cloud Alibaba)基础入门篇 ---- 搭建环境

springcloud官方文档&#xff08;Hoxton SR5&#xff09;&#xff1a;https://cloud.spring.io/spring-cloud-static/Hoxton.SR5/reference/htmlsingle/ springcloud中文文档&#xff1a;https://www.springcloud.cc/ springcloud中国社区文档&#xff1a;http://docs.springcl…

【C++】栈~~(很详细哦)

在前几天&#xff0c;我们刚一起学过顺序表&#xff0c;链表&#xff08;无头单向不循环&#xff0c;有头双向循环&#xff09;&#xff0c;这两种都属于线性表因为是一系列存储的。而以后的哈希表则是散列表 今天我们看一下栈 目录 1.栈的介绍 2.实现 3.题目 1.栈的介绍 …

mindspore::dataset::GetAffineTransform的输出与cv2的输出不同

在使用C进行推理时用到了函数mindspore::dataset::GetAffineTransform&#xff0c;但是输入相同的数据后&#xff0c;与Python的cv2中的同名函数cv2.getAffineTransform所输出的结果不同。 C Ascend310端测试核心代码 #include <iostream> #include <vector>#…

synchronized 关键字背后的锁升级流程

文章目录前言一、基本特点二、加锁过程总结前言 博主个人社区&#xff1a;开发与算法学习社区 博主个人主页&#xff1a;Killing Vibe的博客 欢迎大家加入&#xff0c;一起交流学习~~ 一、基本特点 结合多线程锁的策略, 我们就可以总结出, Synchronized 具有以下特性(只考虑 J…