【 基于Netty实现聊天室聊天业务学习】第4节.什么是BIO与NIO

news2025/1/14 1:07:27

-w774

IO在读写的时候是阻塞的,无法做其他操作,并发处理能力的非常低,线程之间访问资源通信时候也是非常耗时久,依赖我们的网速,带宽。

我们看一下他的白话原理

我们来看一下这张图那么这张图的话它里面有一个server还有三个客户端那么客户端的话它可以有很多,那么我们的服务器server其实它会有一个专门的线程称之为accept or它是专门来负责监听和客户端之间的请求,那么只要有client只要有我们的客户端和我们的服务端建立一个请求那么这个时候我们的服务端和我们的客户端呢他们之间都会创建一个新的线程来进行处理,那么这其实是一种非常典型的一应一答的模式那么如果说我们在这个时候客户端的数量会非常多的时候逐渐增多的时候那么我们在这个时候我们的server和我们的client之间,它会频繁的创建和频繁的销毁相应的线程,那么这个时候呢我们的服务器会有很大的一个压力,甚至会导致我们的服务器崩溃,那么所以说这种方式呢是啊非常老的一种l流的处理方式,那么所以说啊在后续的一段时间呢它会进行了一段改良,那么改良之后那么它就不是通过额外的新增线程了,那么它就是会创建一个线程池,那么通过线程池来进行我们的处理那么这个时候这种方式呢其实也可以称之为是一种伪异步lo,我们来举一个例子啊,呃如果说啊打个比方我现在去上厕所那么厕所的坑呢全部都已经满了那么这个时候我就一直在等着啊我什么事情都不干我就在那边光等着我会主动的观察啊注意啊我说的是主动两个字,我会主动的观察啊哪一个坑好了那么只要有坑位释放了我我这个时候就立马去站开那么其实这个就是一种啊我们生活中的一种实例通过这个实例我们可以去理解这是一种同步阻塞的l0

-w838

我们看一下他的白话原理

现在我去上厕所那么厕所的坑呢全满了这个时候我不会像之前那样,我会呢啊跑出去啊抽根烟啊或者说拿出手机来摇一摇这个时候你会发现我并不是光在那边等着了吧,对吧然后呢这个时候我会啊时不时再主动的回到厕所去看一下看一看有没有坑释放如果说有释放了那么这个时候我再去占一个坑,可以看得出来我现在呢不是在那边光等着而是我同时在做一些别的事情那么这个就是区别那么nio的话其实是在jdk 1.4之后所出现的啊,然后呢它有一些基本概念,比方说它有一个是selector它是一个选择器也称之为多路复用器另外呢还有buffer它是一个缓冲区,还有是一个channel是一个双向通道那么这些我们会结合我们的一个图例来进行一个阐述,我们来看一下这边呢我们会有一个server是我们的服务端另外还有三个客户端那么客户端其实是可以有很多我们在这里只会举三个,然后他们在这个地方去进行一个通信的时候那么首先我们就会使用到一个selector,这一个selector它就是一个选择器你也可以称之为是一个多路复用器,它其实就是一个线程它这个线程会主动的轮询如果说我们的客户端和我们的server端要建立链接的时候那么其实就可以看到它其实是进行一个注册,那么注册完毕之后那么我们就会有一个channel one那么每一个客户端和我们的selector建立链接链接之后都会有一个channel,那么channel它是一个通道是一个双向通道它可以进行一些相应的数据的,读写那么这些数据的读写都会到我们的buffer缓冲区里面去,那么现在我们会有client二client三再和我们的selector去进行一个注册这个时候就会有channel二和channel三那么这个就是我们的一个nio的其实一个最基本的一张图示,通过使用channel注册到selector上之后呢其实就可以实现一种客户端和服务端的通讯方式了吧,那么channel中的数据啊我们之前也说了它的读取或者说是读写都是通过buffer,是一种非阻塞的读取那么如果说没有数据那么它会直接跳过它不会同步的在那边等着你有数据,然后我们的selector多路复用器呢它其实是一个单线程它的整整体来说啊它的这个线程的资源开销会非常的少,光这一个线程它就可以处理成千上万个客户端,那么客户端的增多不会去影响它的性能这个就是和我们一个之前所说bio所他们的之间的一个差别吧,另外我们再理解一下那么channel它相当于是一个读取的工具每一个客户端都可以理解为是一个单独的channel或者说每一个客户端当你在和我们的服务端,建立链接之后注册完毕之后就会有一个单独的channel它是一个一对一的,一个client就会有一个channel然后每一个服务端呢会有一个selector那么buffer里面的数据,会用于进行读写然后呢数据被读完之后它的这个数据啊其实还是会存在在我们的buffer里面的它不会因为我们的数据读取了之后那么我们的数据就消失,那么这个就是区别于stream那么我们的stream如果说我们去读啊读完之后我们的数据就没有了对吧然后我们的channel和我们的selector从我们这张图里面也可以看得出来它其实是啊可以说是一对多吧对吧一个selector,它可以去让多个client去进行注册然后呢它就会有多个channel可以理解为是一种一对多的这种方式那么这个就是一个nio它就是一个同步非阻塞的io

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

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

相关文章

基于SSM的学校在线考试系统的设计与实现

功能需求 管理员模块 管理员模块是整个学校在线考试系统中最为重要的管理者,能够对网站内的各种信息进行管理,能够对教师、学生的个人资料进行管理,对于已经离校的学生将其剔除考试名单,将新入校的学生纳入到考试名单中。对于入…

【Taro3踩坑日记】找不到sass的类型定义文件

问题截图如下:找不到sass的类型定义文件 解决办法: 1、npm i types/sass1.43.1 2、然后配置 TypeScript 编译选项:确保 TypeScript 编译器能够识别 Sass 文件,并正确处理它们。

什么是IoT?

什么是IoT? IoT,即物联网(Internet of Things),是通过信息传感设备和互联网将各种物品连接起来,实现智能化的识别、定位、跟踪、监控和管理的网络系统。 以下是关于IOT的一些详细解释: 基本概…

Linux驱动开发笔记(零)驱动基础知识及准备

文章目录 前言一、Liunx、MCU和FPGA编程的区别二、Linux内核模块1. 什么是内核模块2. 内核模块的代码架构3. 头文件4. 模块参数5. makefile说明 三、 驱动程序设计思路1. 基本步骤2. 设备号3. 数据结构3.1 file_operations3.2 file3.3 inode3.4 哈希表3.5 cdev结构体3.6 kobj_m…

SpringMVC核心流程解析

SpringMVC核心流程解析 DispatcherServlet的继承关系请求流程分析获取HandlerChain(ControllrtMethod拦截器)获取HandlerAdapter handlerMappings的初始化过程 DispatcherServlet的继承关系 DispatcherServlet本质是一个servlet,既然是servlet,一个请求…

缓存的使用及常见问题的解决方案

用户通过浏览器向我们发送请求,这个时候浏览器就会建立一个缓存,主要缓存一些静态资源(js、css、图片),这样做可以降低之后访问的网络延迟。然后我们可以在Tomcat里面添加一些应用缓存,将一些从数据库查询到…

Docker 部署 WordPress 并完成建站

什么是 WordPress WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一款个人博客系统,并逐步演化…

36. UE5 RPG在激活技能时使用蒙太奇动画

在上一篇文章里面,我们实现了一个简单的火球术,创建了火球术的火球,以及能发射它的技能。很简陋,在技能触发的时候,直接在武器的位置生成火球发射出去。在一篇文章里,我们要实现使用技能时,角色…

代码随想录:二叉树11-12

目录 222.完全二叉树的节点个数 题目 代码(层序迭代) 代码(后序递归) 代码(满二次树递归) 总结 110.平衡二叉树 题目 代码(后序递归) 代码(层序迭代&#xff0…

关基网络战时代,赛宁网安电力网络攻防靶场全面提升电网安全防护力

随着网络空间成为与陆地、海洋、天空、太空同等重要的人类活动新领域,自网络空间向物理电网发起攻击,破坏电力等国家关键基础设施成为当前大国博弈、大规模战争的重要手段和常态进攻形式。同时,新型电力系统建设发展驱动电力系统形态和控制方…

nginx installed inLinux

yum install nginx [rootmufeng ~]# yum install nginx CentOS系列:【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细) ———————————————— 版权声明:本文为博主原创文章,遵循 CC …

LLAMA 3的测试之旅:在GPT-4的阴影下前行

Meta终于发布了他们长期期待的LLAMA 3模型,这是一个开源模型,实际上提供了一系列新的功能,使得模型在回答问题时表现得更好。这对AI社区来说是一个真正的里程碑事件。 Meta正在发布新版本的Meta AI,这是一种可以在他们的应用程序和…

原型和原型链--图解

https://juejin.cn/post/7255605810453217335 prototype是函数的属性(一个对象),不是对象的属性,普通函数和构造函数的prototype属性是空对象{}(其实有2个属性,一个是constructor&a…

PVE grub resue错误修复 lvmid BUG

服务器断电后启动不起来,显示grub resue 找了半天没有找到修复方法。看官方文档有一处Recovering from grub “disk not found” error when booting from LVM 极为类似。https://pve.proxmox.com/wiki/Recover_From_Grub_Failure 下面是处理过程。 使用PVE 6.4启…

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧,新车型研发项目的进度管理成为车企赢得市场的关键。然而,由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点,项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

数据结构|树形结构|并查集

数据结构|并查集 并查集 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 有趣的并查集剧情演绎:【算法与数据结构】—— 并…

多个路由器连接的PC端进行ping通信需要做的事

实验环境: 三台PC三台路由器,并且配置好IP 拓扑图: 需求描述: 在PC0进行与PC2的ping通信: 需求步骤: 1.1首先配置ip(略过) 1.2我们首先查看在只配置了IP的情况下,P…

跨境电商指南:防关联浏览器和云主机有什么区别?

跨境电商的卖家分为独立站卖家和平台卖家。前者会自己开设独立站点,比如通过 shopify;后者则是入驻亚马逊或 Tiktok 等平台,开设商铺。其中平台卖家为了扩大收益,往往不止开一个店铺,或者有店铺代运营的供应商&#xf…

java音乐播放器系统设计与实现springboot-vue

后端技术 SpinrgBoot的主要优点有: 1、为所有spring开发提供了一个更快、更广泛的入门体验; 2、零配置; 3、集成了大量常用的第三方库的配置; Maven: 项目管理和构建自动化工具,用于java项目。 java: 广泛使用的编程语…

Docker Desktop打开一直转圈的解决办法

安装Docker Desktop之前确保你的Hyper-V已经打开 开启后需要重新安装重新安装重新安装这是最关键的一步,博主自己看了很多教程,最后试着重装了一下解决了 安装DockerDesktop的时候我的电脑根本就没有Hyper-V这个功能选项,可能是这个问题 如…