首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BIONIO

BIONIO 我们平常使用的IO是BIO(Blocking-IO),即阻塞IO、而NIO(No-blocking-IO)则是非阻塞IO,二者有什么区别呢?...主要体现在网络IO中,所以下面就围绕网络IO来说明,这里会涉及到传统的BIO、网络编程、反应器设计模式,如果不了解的童鞋这里有各自的传送门 BIO ,[未完善] 二者区别 BIO NIO 类型 同步阻塞...同步非阻塞 面向 面向流 面向缓冲区 组件 无 选择器 若没有了解过NIO,那么列出的区别只需有个印象即可,后面会逐步说明 2.BIO 2.1 传统BIO 传统的IO其读写操作都阻塞在同一个线程之中...,即在读写期间不能再接收其他请求 那么我们就来看看传统BIO是怎么实现的,后面都以网络编程的Socket为例,因其与后面的NIO有关 public class BIO { public...划重点:传统BIO在事件还没到达时该线程会被阻塞而等待,一次只能处理一个请求(可以使用多线程来提高处理能力)。而NIO在事件还没到达是非阻塞轮询监听的,一次可以处理多个事件。

70920

BIONIO、AIO

以上的两组概念可以两两组合,就组合了我们熟悉的BIONIO、AIO。 3....BIO方式适用于连接数目比较小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中,在jdk1.4以前是唯一的io现在,但程序直观简单易理解。 4....NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,jdk1,4开始支持。...接下来用一个有味道的例子来描述一下以上的IO模型 BIO:去上厕所,坑位全满,此时我光等着,什么都不能做。主动观察哪个坑位好了,只要有坑位释放了,我就去占坑。...NIO:厕所的坑全满了,此时我可以去做点别的事情,然后再时不时的 主动去看 (Selector主动轮询)有没有坑位释放,如果有坑了就去占坑。

68375
您找到你想要的搜索结果了吗?
是的
没有找到

了解NIOBIO

1.linux系统中一切皆文件当有文件 当有一个请求过来的時候就通过3次握手就会和内核创建连接关系,此时Tomcat中的启动的的端口监控就会检测到内核中的文件标识符 fd 此时由linux提供的API...应用程序读根据文件标识符去读取文件流的过程也就是IO BIO BIO 也就是这个就是在当有一个client创的时候就会启动一个线程 因为是阻塞的IO,我们的accept方法时如果他没有消息过来这个线程会一直去监听这个...NIO 1.正是遇到了上述问题,所以我们就得解决问题,聪明的人就提出了BIO的概念,NIO也叫Non-Blocking IO 是同步非阻塞的IO模型。线程发起io请求后,立即返回(非阻塞io)。...Java中的NIO 是new IO的意思。 ?...普通的NIO是线程轮询查看一个IO缓冲区是否就绪,而Java中的new IO指的是线程轮询地去查看一堆IO缓冲区中哪些就绪,这是一种IO多路复用的思想。

41130

BIO,NIO,AIO总结

Java 中的 BIONIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。...在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。...BIO (Blocking I/O) 同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。 传统 BIO BIO通信(一请求一应答)模型图如下(图源网络,原出处不明): ?...尤其在 Linux 这样的操作系统中,线程本质上就是一个进程,创建和销毁线程都是重量级的系统函数。...不过因为它的底层仍然是同步阻塞的BIO模型,因此无法从根本上解决问题。 代码示例 下面代码中演示了BIO通信(一请求一应答)模型。

87510

BIONIO

NIO:同步非阻塞IO,客户端请求服务端,在服务端处理过程中,客户端可以去干其他的东西,也可以隔一段时间去询问服务端,是否已处理完成。...下面就来看一下BIONIO的使用方法。...因为传统的BIO在每当有一个客户端连接时,服务端就会创建一个线程去处理新的客户端链路,还有一个是伪异步,就是服务端用线程池去处理客户端的连接。 ?...二、同步非阻塞IO:NIOBIO的SocketServer、Socket对应的是,NIO提供了ServerSocketChannel和SocketChannel,这两种套接字支持阻塞和非阻塞,需要使用者进行配置阻塞...NIO有几个重要的关键点: (1)缓冲区Buffer:在NIO中,所有数据的读写都是需要通过缓冲区处理。

80140

简单谈谈BIO,NIO,AIO

---- IO 概述 IO 的操作方式通常分为几种:同步阻塞 BIO、同步非阻塞 NIO、异步非阻塞 AIO。 (1)在 JDK1.4 之前,我们建立网络连接的时候采用的是 BIO 模式。...BIONIO 一个比较重要的不同是, 我们使用 BIO 的时候往往会引入多线程,每个连接对应一个单独的线程;而 NIO 则是 使用单线程或者只使用少量的多线程,让连接共用一个线程。...(3)AIO 也就是 NIO 2,在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO 模型。...下面我们来详细介绍这几种 IO 方式 阻塞 IO (BIO) 基本理解 阻塞 IO(BIO)是最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象,直至 有可供读取的数据或者数据能够写入。...传统的 BIO 模式如下 图所示: 非阻塞 IO(NIO)   基于 BIO 的各种弊端,在 JDK1.4 开始出现了高性能 IO 设计模式非阻塞 IO(NIO)。

19250

NIO vs BIO模型解读

可以看到中间环节较多,java 的 IO 实际不是物理设备级别的读写,而是缓存的复制,底层的真正读写是操作系统来完成的 用户态与内核态的切换发生了 3 次,这个操作比较重量级 数据拷贝了共 4 次 NIO...DirectByteBuf 对象被垃圾回收,将虚引用加入引用队列 通过专门线程访问引用队列,根据虚引用释放堆外内存 减少了一次数据拷贝,用户态与内核态的切换次数没有减少 进一步优化(底层采用了 linux...数据从内核缓冲区传输到 socket 缓冲区,cpu 会参与拷贝 最后使用 DMA 将 socket 缓冲区的数据写入网卡,不会使用 cpu 只发生了一次用户态与内核态的切换 数据拷贝了 3 次 进一步优化(linux

15620

Java IO: BIO, NIO, AIO

BIO, NIO, AIO,本身的描述都是在Java语言的基础上的。...而描述IO,我们需要从三个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO, NIO, AIO以Java的角度理解: BIO,同步阻塞式IO,简单理解:一个连接一个线程 NIO,同步非阻塞IO...NIO本身是基于事件驱动思想来完成的,其主要想解决的是BIO的大并发问题:在使用同步I/O的网络应用中,如果要同时处理多个客户端请求,或是在客户端要同时和多个服务器进行通讯,就必须使用多线程来处理。...可以理解的说明是:在Linux 2.6以后,java NIO的实现,是通过epoll来实现的,这点可以通过jdk的源代码发现。...Linux上还没有真正实现网络方式的AIO。

62440

Netty 之传统 BIONIO 编程

传统 BIO 编程是什么样的?...BIO 通信模型 对于每个客户端,服务端都要新建一个线程。 当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数量呈1:1的关系,当线程数膨胀后,系统的性能将急剧下降。...NIO 编程 首先问自己一个问题,什么才是NIO编程?对于NIO,官方的说法是:New I/O;但是更多的人喜欢称之为Non-block I/O(非阻塞I/O)。...BIO中的Socket类和ServerSocket类,对应于NIO中的SocketChannel和ServerSocketChannel两种不同的套接字通道实现,这两种套接字都支持阻塞和非阻塞两种模式。...NIO 类库简介 缓冲区 Buffer 在面向流的I/O中,可以直接读取或写入数据至Stream对象中;在NIO中,所有数据都是通过缓冲区处理的:读取数据时,直接读到缓冲区;写入数据时,写入到缓冲区。

37060

聊聊BIONIO和AIO (2)

Linux下实际使用比较多的是Linux AIO。 Linux AIO Linux中的另外一套AIO接口被称为Linux AIO,是Linux在内核实现的一套AIO接口。这套是"真・AIO"。...Linux提供了eventfd解决这个问题。 使用eventfd协调epoll和Linux AIO 如果在Linux下编写一个高性能文件服务器,就需要同时用到epoll和Linux AIO。...基于以上的这些问题,一般上层(nodejs,Java NIO)都会选择用线程池+BIO来模拟文件AIO。...好处是: BIO这一套接口非常完备,文件IO除了read,write,还有stat,fsync,rename等接口在现实中也是经常需要”异步“的; 编程容易。看看上面的例子,是不是非常容易晕。...BIO天然可以利用Page Cache来提高性能; 容易跨平台。不同操作系统的线程实现和BIO的实现基本上完备一致,不会像AIO那样细节差异相当巨大。

1.3K20

什么是BIONIO和AIO?

周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问题,其中包括什么是BIONIO和AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是很满意。...分别是BIONIO和AIO。 Java BIO BIO 全称Block-IO 是一种同步且阻塞的通信模式。是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。...Java NIO Java NIO,全程 Non-Block IO ,是Java SE 1.4版以后,针对网络传输效能优化的新功能。是一种非阻塞同步的通信模式。...三种IO的区别 首先,我们站在宏观的角度,重新画一下重点: BIO (Blocking I/O):同步阻塞I/O模式。 NIO (New I/O):同步非阻塞模式。...使用方式 使用BIO实现文件的读取和写入。

5.1K44

BIONIO的升级演练

总结:通过BIO,读取硬盘的文件数据,要经历两次复制的操作,才能把数据读取到内存空间。 3、NIO NIO是同步非阻塞的IO操作。下图是NIO在进行IO操作时,数据流向过程。 ?...4、BIONIO文件拷贝测试 在本地同时拷贝一份400M的mp4资源,BIONIO所消耗的时间比较。...因为考虑的不确定的因素可能会对测试结果造成影响,所以作者特地测试了三次,从结果来看,在tomcat中,使用nio后的性能确实比bio的性能好。 6、NIO在Redis中使用。...但是对于服务端来说,使用NIOBIO在时间性能上提高了几千倍。 所以:BIO是阻塞的,而NIO是非阻塞的。NIO可以在BIO阻塞的时间上去处理别的操作,从而提高服务端性能。...7、IO模型图 BIO模型图: ? NIO模型图: ?

46230

聊聊BIONIO和AIO (1)

BIO 有了Block的定义,就可以讨论BIONIO了。BIO是Blocking IO的意思。在类似于网络中进行read, write, connect一类的系统调用时会被卡住。...这时,BIONIO的区别是什么呢? 在BIO模式下,调用read,如果发现没数据已经到达,就会Block住。...操作系统并不会强制这俩必须得一起用——你可以用NIO,但不用IO多路复用,就像上一节中的代码;也可以只用IO多路复用 + BIO,这时效果还是当前线程被卡住。...Java NIO,nginx等在对应的平台的上都是使用这些api实现。 因为大部分情况下我会用Linux做服务器,所以下文以Linux epoll为例子来解释多路复用是怎么工作的。...总结 小结一下本文: 对于socket的文件描述符才有所谓BIONIO。 多线程+BIO模式会带来大量的资源浪费,而NIO+IO多路复用可以解决这个问题。

75230

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券