首页 课程 师资 教程 报名

一文告诉你nio和bio的区别

  • 2022-11-11 09:54:08
  • 826次 星辉

Java教程中,大家会学到nio和bio,那么,nio和bio的区别有哪些?星辉小编来告诉大家。

一文告诉你nio和bio的区别

BIO

BIO 是一个传统的 java.io 包。它是基于流模型实现的。交互方式是同步的和阻塞的。也就是说,在读取输入流或输出流时,线程会被阻塞,直到读写动作完成。在那里,它们之间的调用以可靠的线性顺序排列。它的优点是代码比较简单直观;缺点是IO的效率和扩展性很低,容易成为应用性能瓶颈。

BIO的全称是Blocking IO,是JDK1.4之前的传统IO模型,本身就是一种同步阻塞模式。线程发起 IO 请求后,一直阻塞 IO,直到缓冲区数据准备好,然后进入下一步。对于网络通信,它是一种请求-响应方法。虽然简化了上层应用开发,但在性能和可靠性方面存在巨大瓶颈。想象一下,如果每个请求都需要创建一个新的线程进行特殊处理,那么在高并发的场景下,机器资源很快就会被耗尽。

NIO

NIO 是 Java 1.4 中引入的 java.nio 包。它提供了Channel、Selector、Buffer等新的抽象,可以构建多路复用、同步的非阻塞IO程序,同时提供更接近底层操作系统的高性能数据操作。方法。

NIO,也叫Non-Blocking IO,是一种同步的非阻塞IO模型。线程发起io请求后,立即返回(非阻塞io)。同步意味着您必须等待 IO 缓冲区中的数据准备好。非阻塞意味着用户线程不会等待 IO 缓冲区到位。可以先做一些其他的操作,但是需要定期轮询,检查IO缓冲区数据是否准备好。.

Java 中的 NIO 表示新的 IO。其实就是NIO加IO复用技术。普通的 NIO 是线程轮询,看一个 IO 缓冲区是否准备好,而 Java 中的 new IO 是指线程轮询,看一堆 IO 缓冲区中有哪些准备好了,这就是 IO 多路复用的思想。在IO多路复用模型中,检查IO数据是否就绪的任务交给系统级的select或epoll模型,由系统监控,减轻用户线程的负担。

NIO主要集成了三种技术:buffer、channel、selector。数据通过零拷贝缓冲区获取,每个客户端通过通道注册到选择器(多路复用器)上。服务器不断轮询通道以获取有关客户端的信息。通道上有四个状态标志:连接、接受(阻塞)、读(可读)和写(可写)。跟进识别。因此,服务器可以接收无限数量的频道。无需打开新线程。大大提高了性能。

以上就是关于“一文告诉你nio和bio的区别”介绍,感兴趣的小伙伴还可以看看本站的Nio原理详解,相信对大家的学习一定会有所帮助的。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交