【java】BIO、NIO、AIO

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

BIO

同步阻塞IO,使用BIO读取数据时,线程会阻塞住,并且需要线程主动去查询是否有数据可读,并且需要处理完一个Socket之后才能处理下一个Socket

在这种模型下,每个 I/O 操作都会阻塞当前线程,直到操作完成才会返回。这意味着当一个线程执行 I/O 操作时,它会被阻塞,无法执行其他任务,直到 I/O 操作完成。

优点:实现简单,易于理解和使用,

缺点:在高并发环境下性能较差,因为它会导致大量线程阻塞,消耗大量系统资源。

Netty

一个基于NIO的异步网络通信框架,性能高,封装了原生NIO编码的复杂度,开发者可以直接使用Netty来开发高效率的各种网络服务器,并且编码简单。

高性能体现

1.NIO模型,用最少的资源做更多的事情。

2.内存零拷贝,尽量减少不必要的内存拷贝,实现了更高效率的传输。

3.内存池设计,申请的内存可以重用,主要指直接内存。内部实现是用一颗二叉查找树管理内存分配情况。

4.串行化处理读写:避免使用锁带来的性能开销。即消息的处理尽可能再同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。表面上看,串行化设计似乎CPU利用率不高,并发程度不够。但是,通过调整NIO线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队列多个工作线程模型性能更优。

5.高性能序列化协议:支持protobuff等高性能序列化协议。

6.高效并发编程的体现:volatile的大量、正确使用;CAS和原子类的广泛使用;线程安全容器的使用;通过读写锁提升并发性能。

vs Tomcat

Tomcat是一个Web服务器,是一个Servlet容器,基本上Tomcat内部只会运行Servlet程序,并处理HTTP请求,而Netty封装的是底层IO模型,关注的是网络数据的传输,而不关心具体的协议,可定制性更高。

特点:

1.异步、NIO的网络通信框架

2.高性能

3.高扩展,高定制性

4.易用性

NIO

同步非阻塞IO,使用NIO读取数据时,线程不会阻塞,但需要线程主动的去查询是否有IO事件

它提供了 Channel 和 Buffer 的抽象,以及 Selector 的多路复用机制。

在 NIO 中,一个线程可以管理多个 Channel,通过 Selector 监听多个 Channel 的事件,当某个 Channel 有 I/O 事件发生时,线程会被唤醒处理该事件,这样一个线程可以处理多个并发连接,提高了系统的吞吐量和性能。

AIO

也叫做NIO2.0,异步非阻塞IO,使用AIO读取数据时,线程不会阻塞,并且当有数据可读时会通知给线程,不需要线程主动去查询

它基于事件和回调机制,相对于 NIO 更进一步地解放了线程,使得一个线程可以管理多个 I/O 操作。

在 AIO 中,I/O 操作不会阻塞当前线程,而是在完成后通过回调通知应用程序,从而实现了真正的异步非阻塞 I/O。文章来源地址https://www.toymoban.com/news/detail-846050.html

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

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

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

相关文章

  • 【Java基础】BIO/NIO/AIO的详细介绍与比较区分

    BIO 全称 Blocking I/O,它是 JDK 1.4 之前的传统IO模型,是一种同步阻塞的IO,线程发起 IO 后,一直阻塞,直到缓冲区数据就绪后,在进入下一步操作 BIO存在的问题: 无法应对高并发的场景 连接建立后,当前线程没有数据可读就会阻塞,造成资源浪费 BIO适用场景: 客户端连接数

    2024年01月20日
    浏览(26)
  • Java中的三种I/O模型:BIO、NIO和AIO

    I/O(输入/输出)操作是任何应用程序中必不可少的一部分,它涉及到与文件、网络或其他设备之间的数据传输。Java提供了几种不同的I/O模型,其中最常见的是AIO(异步非阻塞I/O)、BIO(阻塞I/O)和NIO(非阻塞I/O)。这些模型在处理I/O操作时具有不同的工作方式、特性和适用

    2024年02月08日
    浏览(31)
  • BIO、NIO和AIO

    目录 一.引言 何为IO IO的过程 Java的3种网络IO模型 阻塞和非阻塞IO IO多路复用 异步和同步IO 二.BIO 三.NIO 1. 三大组件 Channel Buffer Selector 2.ByteBuffer 2.1ByteBuffer的使用 2.2ByteBuffer 结构 ​2.3ByteBuffer的常用方法 分配空间   向 buffer 写入数据 从 buffer 读取数据 字符串与 ByteBuffer 互转 分

    2024年02月12日
    浏览(24)
  • BIO、NIO、AIO区别详解

    主线程发起io请求后,需要等待当前io操作完成,才能继续执行。 引入selector、channel、等概念,当主线程发起io请求后,轮询的查看系统是否准备好执行io操作,没有准备好则主线程不会阻塞会继续执行,准备好主线程会阻塞等待io操作完成。 主线程发起io请求后,不会阻塞,

    2024年02月07日
    浏览(33)
  • BIO、NIO、AIO 的区别

    Java面试题  阻塞IO。一个连接一个线程,当服务端接受到多个客户端的请求时,客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 同步非阻塞IO 。一个线程处理多个连接。NIO 包含  Channel(通道)、Selector(选择

    2024年01月20日
    浏览(25)
  • BIO、NIO、AIO 有什么区别?

    Java 中的I/O模型主要分为三类:BIO(Blocking I/O)、NIO(New I/O)和AIO(Asynchronous I/O)。它们在处理I/O操作时有着不同的工作方式和特点。 BIO是传统的I/O模型,也称为同步I/O。在BIO中,每个I/O操作都会阻塞线程,直到数据准备好或者操作完成。这意味着一个线程只能处理一个连

    2024年01月16日
    浏览(26)
  • BIO、NIO、AIO 有什么区别

    在Java中,BIO(Blocking I/O)、NIO(Non-blocking I/O)和AIO(Asynchronous I/O)都是用于处理I/O(输入/输出)操作的不同方式。它们在处理I/O时具有不同的特点和适用场景。 BIO(Blocking I/O): 阻塞式I/O模型,是Java最传统的I/O模型。 在BIO中,每个I/O操作都会阻塞当前线程,直到操作完

    2024年02月13日
    浏览(28)
  • BIO、NIO、IO多路复用模型详细介绍&Java NIO 网络编程

    上文介绍了网络编程的基础知识,并基于 Java 编写了 BIO 的网络编程。我们知道 BIO 模型是存在巨大问题的,比如 C10K 问题,其本质就是因其阻塞原因,导致如果想要承受更多的请求就必须有足够多的线程,但是足够多的线程会带来内存占用问题、CPU上下文切换带来的性能问题

    2024年02月14日
    浏览(35)
  • 代码分析Java中的BIO与NIO

    OS:Win10(需要开启telnet服务,或使用第三方远程工具) Java版本:8 BIO(Block IO),即同步阻塞IO,特点为当客户端发起请求后,在服务端未处理完该请求之前,客户端将一直等待服务端的响应。而服务端在此时也专注于该请求的处理,无法处理其它客户端的请求。 在IDEA运行上述

    2024年02月14日
    浏览(26)
  • Java NIO FileChannel:BIO与NIO区别、核心组成部分和常用方方法

    深入探讨Java NIO中的FileChannel,包括BIO与NIO的区别、NIO的核心组成部分(Channels、Buffers、Selectors)、FileChannel的常用方法以及示例代码。了解如何使用FileChannel进行文件数据读写操作。

    2024年01月25日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包