33. bio和nio

这篇具有很好参考价值的文章主要介绍了33. bio和nio。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、bio网络模型

1.1 bio网络模型示意图

单个客户端向服务器发起请求时,请求顺序如下:
33. bio和nio,# 9 知识点,nio,bio

多个客户端向一个服务器发起请求时,请求顺序如下:
33. bio和nio,# 9 知识点,nio,bio

1.2 bio网络模型缺点

1.阻塞式I/O

服务器端的线程会因为阻塞I/O,一直阻塞,等待客户端的请求。
若客户端一直不发起,服务端的业务线程会一直存在。

2.弹性伸缩能力差

因为一个客户端对应一个服务端的业务线程,那么客户端和服务端线程数是1比1的关系,再好的机器也难以承受过多的线程。

3.多线程耗费资源

线程的创建销毁、大量的线程存在服务端,服务端的cpu调度资源都会存在影响

二、NIO网络模型

2.1 nio网络模型示意图

单个客户端向服务器发起请求时,请求顺序如下:
33. bio和nio,# 9 知识点,nio,bio

2.2 nio网络模型的改进

1.非阻塞式I/O

nio模型是基于非阻塞式I/O构建出来的,服务器端提供一个单线程的select,统一管理所有客户端接入的socket链接,并负责监听每个链接所关心的事件。

2.弹性伸缩能力强

因为服务端不是多个线程来处理,而是一个线程就可以处理所有请求,所有客户端和服务端线程数是1比N的关系,理论上可以接入无限的请求。

3.单线程节省资源

减少了线程的创建和销毁,以及线程上下文的切换问题。

三、NIO核心- Channel(通道)

3.1 Channel 简介

1.双向性

信息传输的通道,jdk的nio是对输入输出的方式的另一种抽象,类比bio中的流的概念。
不同的是流是单向传输,分输入流输出流。而通道支持双向传输,一个channel既可读又可写。

2.非阻塞性

传统流是阻塞模式,而channel可以工作在非阻塞模式下。

3.操作唯一性

操作channel的唯一方式是buffer,通过buffer操作channel实现数据块的回写

3.2 Channel 实现类

1.文件类 : FileChannel - 对文件进行读写的流 2.UDP类 :DatagramChannel - 用于UDP的数据读写 3.TCP类 : ServerSocketChannel/SocketChannel 基于TCP的数据读写

3.3 bio的socket 和 nio的channel代码实现

bio的socket代码实现逻辑
33. bio和nio,# 9 知识点,nio,bio

nio的channel代码实现逻辑
33. bio和nio,# 9 知识点,nio,bio

四、NIO核心- buffer(缓冲区)

4.1 buffer简介

作用 - 读写channel中的数据或者将数据写到channnel中。
本质 - 一块内存区域。这块内存能读数据,写数据,被nio封装成了一个buffer对象,提供了一系列API。

4.2 buffer属性

1.Capacity:容量 - 表明数组可以容纳多少字节,如果写入的字节数超过最大容量,那么需要清空后,才能继续往里面写入数据。
2.Position: 位置 - position表示当前位置,初始化为0,当一个byte写入后,position会移动到下一个可插入的数据单元。position最大可为容量减1
3.Limit:上限(写模式下) -limit表示最多能往buffer里写入多少数据,此模式下limit等于Capacity。
4.Limit:上限(读模式下) -limit表示最多能从buffer里读多少数据,这时limit会被设置成Position值
5.Mark:标记 - 表示一个特定的position位置,可以通过调用buffer的reset方法恢复到这个position位置。

4.3 buffer的API

1.初始化
33. bio和nio,# 9 知识点,nio,bio

2.写数据
33. bio和nio,# 9 知识点,nio,bio

3.写模式切换为读模式
33. bio和nio,# 9 知识点,nio,bio

4.读取一个字节
33. bio和nio,# 9 知识点,nio,bio

5.设置mark标记
33. bio和nio,# 9 知识点,nio,bio

6.回到标志位
33. bio和nio,# 9 知识点,nio,bio

7.重置属性
33. bio和nio,# 9 知识点,nio,bio

五、NIO核心- Select(选择器)

5.1 简介

1.作用 - I/O就绪选择
2.地位 - NIO网络编程的基础
3.定义 - select是java的nio中能够检测1到多个nio通道,并能够知晓通道是否为诸如读写事件做好准备的组件,通过他,一个单独的线程就可以管理多个channel,从而管理多个链接。

5.2 核心API

33. bio和nio,# 9 知识点,nio,bio

5.3 SelectionKey简介

1.四种就绪状态常量
    connect 连接就绪
    accept  接收就绪
    read    读就绪
    write   写就绪

六、NIO编程实现步骤

33. bio和nio,# 9 知识点,nio,bio
33. bio和nio,# 9 知识点,nio,bio
33. bio和nio,# 9 知识点,nio,bio

七、总结

33. bio和nio,# 9 知识点,nio,bio
33. bio和nio,# 9 知识点,nio,bio
33. bio和nio,# 9 知识点,nio,bio
33. bio和nio,# 9 知识点,nio,bio
33. bio和nio,# 9 知识点,nio,bio文章来源地址https://www.toymoban.com/news/detail-583926.html

到了这里,关于33. bio和nio的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web知识点复习

    1. get/post请求优缺点 (1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中) (2)post发送的数据更大(get有url长度限制) (3)post能发送更多的数据类型(get只能发送ASCII字符) (4)post比get慢,get和post请求的过程中GET产生一个T

    2024年01月22日
    浏览(40)
  • Python函数知识点

         函数是指一段可以直接被另一段程序或代码引用的程序或代码,也叫做子程序、方法。现阶段可以理解成函数是带名字的代码块。 函数需要先定义再使用!     举个例子来说,想要判断一个三角形是不是直角三角形,需要用到勾股定理,只有先明确的定义出勾股定理是

    2023年04月09日
    浏览(41)
  • 柔性数组知识点

    什么是柔性数组?柔性数组其实也是动态内存管理部分的内容。这节主要来复习柔性数组的知识点。  当结构体的最后一个成员为数组, 且这个数组的大小未确定时, 我们就称它是柔性数组。 如: struct stu {         char name[20];         int age;         char adress[]; } 这里的

    2024年02月22日
    浏览(51)
  • 数组的知识点

    数组是存放在 连续空间 上的 相同类型 的数据集合。 特点: 1、数组下标都是从0开始的; 2、数组内存空间的地址是连续的。 C++,要注意vector和array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。 C++中二位数组在地址空间是连续的。测试代码: 特点 :前提

    2023年04月22日
    浏览(54)
  • 前端一些知识点

    由来 cookie设计的初衷是用于维护HTTP状态 原理 浏览器首先发送一个无状态请求到服务端 服务端带上cookie返回 浏览器后面的请求都会带上cookie(如果客户端或者服务端对cookie没有操作的话) 生成机制 服务端生成,在Http Response Header 中 Set-Cookie 客户端生成,通过 document.cookie设

    2024年03月13日
    浏览(47)
  • HTML知识点

    【1】什么是HTML HTML是一种用于创建网页结构和内容的 超文本标记语言 ,它是构建网页的基础。 为了让浏览器正确渲染页面,我们必须遵循HTML的语法规则。 浏览器在解析网页时会将HTML代码转换为可视化的页面,所以我们在浏览器中看到的页面实际上是由HTML代码生成的。 【

    2024年02月22日
    浏览(50)
  • SpringBoot知识点复习

    约定优于配置:Spring Boot鼓励开发人员遵循一组默认约定,减少配置的复杂性。 自动配置:Spring Boot可以自动配置应用程序,根据项目的依赖和需要自动配置Spring特性。 嵌入式Web服务器:Spring Boot提供了内嵌的Web服务器,如Tomcat、Jetty和Undertow,使Web应用程序的部署变得简单。

    2024年02月05日
    浏览(42)
  • 多线程知识点

    例如:一个短视频,一个线程复制管理视频,一个线程负责管理声音,一个线程负责管理弹幕 进程:Process,程序一旦开始运行就是是一个进程 线程:Thread,一个程序运行后,里面就包含了多个线程 真正的多线程是指有多个cpu,即多核。如果是模拟的多线程,即只有一个cpu,在

    2024年02月11日
    浏览(46)
  • Langchain知识点(下)

    这部分给主要介绍Langchain的agent部分,前面已经章节已经介绍了思维和思路作为一种数据资产是这一次LLM数据化的核心。也介绍了各种的chain,那么既然有了chain可以把专家思路和专家思维固化并且可被方便的共享和利用;那为什么还要引入Agent的概念。个人的感觉是Agent和ch

    2024年02月05日
    浏览(110)
  • Mysql知识点汇总

    select distinct 列名 from 表名 where 查询条件表达式 group by 分组的列名 having 分组后的查询条件表达式 order by 排序的列名 ascdesc 升序降序 limit 查询的记录条数 每门课程大于80分——》最低分不小于80分 order by: 用于排序,默认是升序排序 后面用用asc或者desc order by 后面跟

    2024年02月19日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包