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

这篇具有很好参考价值的文章主要介绍了【 基于Netty实现聊天室聊天业务学习】第4节.什么是BIO与NIO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

我们看一下他的白话原理

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

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

我们看一下他的白话原理

现在我去上厕所那么厕所的坑呢全满了这个时候我不会像之前那样,我会呢啊跑出去啊抽根烟啊或者说拿出手机来摇一摇这个时候你会发现我并不是光在那边等着了吧,对吧然后呢这个时候我会啊时不时再主动的回到厕所去看一下看一看有没有坑释放如果说有释放了那么这个时候我再去占一个坑,可以看得出来我现在呢不是在那边光等着而是我同时在做一些别的事情那么这个就是区别那么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文章来源地址https://www.toymoban.com/news/detail-858868.html

到了这里,关于【 基于Netty实现聊天室聊天业务学习】第4节.什么是BIO与NIO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于java的聊天室系统设计与实现

    基于java的聊天室系统设计与实现 研究背景: 随着互联网技术的迅速发展和普及,在线聊天和实时通信成为人们日常交流的重要方式。聊天室系统作为实时通信的一种重要形式,具有广泛的应用场景,如远程教育、在线游戏、即时通讯、网络直播等。因此,设计和实现一个基

    2024年02月05日
    浏览(31)
  • 基于springboot与websocket实现简易聊天室

    创建一个简单聊天室的HTML和JavaScript代码,匹配相应的css样式,这个聊天室将使用WebSocket技术,允许用户实时发送和接收消息。 1.1 html和js代码 通过new WebSocket(url)建立一个新的websocket连接。websocket连接建立之后使用websocket.onopen,websocket.onclose,websocket.onerror等方法实时监测we

    2024年02月01日
    浏览(38)
  • 基于WebSocket的简易聊天室的基本实现梳理

    目前在很多网站为了实现推送技术所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信

    2024年02月11日
    浏览(27)
  • 【Linux网络编程】基于UDP实现多人聊天室

    UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。 数据报格式套接字 SOCK_DGRAM 采用UDP只管发送数据而不去验证发送数据的正确性,不论传输是否被接收,数据流是否有丢失,都不再重新发

    2024年02月08日
    浏览(43)
  • C语言实现--基于UDP的多人在线聊天室

    目录 实现功能 实现思想 实现代码(部分及详解) 服务端部分代码 客户端部分代码 实现效果 项目中出现的问题和解决方法 项目整体代码展示 代码优化思路 服务端代码 客户端代码 服务端可以同时连接多个客户端; 新的客户端连接服务端时,可以在服务端显示自己的名字并

    2024年02月04日
    浏览(46)
  • 基于Python guI的多人聊天室的设计与实现

    现在,即时聊天系统已成为 Internet 上的主要交流工具,并且涌现出大量的AP和平台。这些AP和平台都拥有更加完善的交换机制,使得人们可以更加便捷地进行沟通和交换信息。 广域网的聊天系统多重多样,知名的软件主要有 Facebook、腾讯 QQ 等。局域网聊天通信软件也有很多,

    2024年02月05日
    浏览(37)
  • JAVA基于局域网的聊天室系统的设计与实现

           本文介绍了采用JAVA编程开发视频聊天系统的一套比较常用的解决方案。文字聊天采用TCP模式;语音视频聊天采用UDP模式,在客户端之间点对点的进行。在该方案中,通过函数库VFW来实现视频捕获、影像压缩以及影像播放。微软公司提供的专门用于视频捕获开发的工具

    2023年04月15日
    浏览(27)
  • 基于 SpringBoot+WebSocket 无DB实现在线聊天室(附源码)

    0.1 样例展示 0.2 源码地址 GitHub:https://github.com/ShiJieCloud/web-chat Gitee:https://gitee.com/suitbaby/web-chat GitCode:I’m Jie / web-chat · GitCode 1.1 HTTP 常用的 HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出

    2024年02月05日
    浏览(33)
  • 基于Linux系统聊天室增加数据库sqlite功能实现(08)

    全部掌握后,开始进入本篇。 为了方便编译,现在我们将前面文章的代码结构做如下调整。 最终增加了数据的文件目录如下: clean.sh  用于清除临时文件 gcc.sh  用于编译整个工程 服务端代码放置到chat_server目录下;客户端代码放置到chat_client目录下; 数据库相关代码放在

    2024年02月07日
    浏览(34)
  • .NET编程——利用C#实现基于Socket类的聊天室(WinForm)

    在学习C#和MySQL实现注册登录和TCP协议的Socket通信后,本文将介绍如何利用Socket类中的异步通信函数来实现本地聊天室功能, Socket通信限制了客户端与客户端之间的通信,客户端只能接收来自服务器的消息而不能接收到客户端发送的消息,因此服务器最佳的选择是起到一个中

    2023年04月21日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包