JAVA中AIO、BIO、NIO的区别

作者: hoozenorg | 来源:发表于2018-07-03 16:38 被阅读409次

    在我们的生活与工作中,网络无处不在,并且在不断地发展。说到网络,就不得不说网络协议了,在TCP和UDP协议中,TCP使用应该是比较多的,下面我们就说下TCP和UDP。

    TCP:TCP协议是一种面向连接的协议,什么是面向连接呢?就是在双方发送数据前,保证已经建立了可靠的连接,这也是TCP三次握手的原因。

    UDP:UDP协议是一种面向报文的协议,要发送数据时,无需建立可靠的连接,直接抓取应用程序的数据并丢到网络上。

    并且,TCP能够保证数据的正确性,并且保证数据包的顺序,而UDP是无连接的,只是把数据包丢到网络中,对方收不到也不会重发,可能导致数据丢包、顺序错乱,所以,在一般的网站中,向下单、抢购、付款等等操作都是TCP方式的。

    在网络变成中,有一个很重要的东西,那就是IO的方式,主要有AIO、BIO、NIO,IO方式对并发性能影响很大。

    BIO:最传统的IO方式,是一种阻塞的IO。在目前的大多数网站中,都不会采用。这还要从socke(套接字:用来进行网络两端通信的,本质是编程接口)说起。

    socket有TCP socket和UDP socket。

    就是这种阻塞模式的socket,使得每一个socket都要绑定到一个线程上,而且服务器上创建线程也是有限的,如果一个socket阻塞了,那么该线程也就阻塞了,浪费了大量的资源。

    NIO:NIO解决了socket与IO线程耦合的问题。java的NIO框架比较复杂,现在有了许多基于NIO的网络框架,隐藏了NIO底层的复杂细节,简化了编程。主流的框架有netty等。NIO是基于多路复用模式的,一般都实现了Reactor(反应器)模型。

    并且NIO抛弃了stream、byte[]等数据结构,采用了新的数据结构ByteBuffer。

    AIO(其实就是NIO.2):AIO主要有两部分组成,Files用于解决文件的一部处理问题,Sockets用于解决Socket的一部处理问题,在Linux上,主要有两种实现,一种是Posix AIO,即用户态实现,另一种是Kernel Native AIO内核态实现,性能比较高,nginx、mysql等的新版本都支持kernel Natice AIO。

    其实AIO才是非阻塞的IO,NIO不是非阻塞的IO,NIO是在IO就绪后得到通知进行对IO进行读写,此时进程是阻塞的(和BIO对比的话就是不用等待IO就绪时间),属于同步IO。而AIO是直接从buffer中取出数据(IO的读写有操作系统完成,自己只负责逻辑部分的处理),是异步的IO。

    初次发表文章,请大家多多指教。

相关文章

  • BIO,NIO,AIO 总结

    BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 ...

  • BIO,NIO,AIO 总结

    BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 ...

  • Network Programming - 网络编程

    Java高级篇(三九)------BIO、NIO、AIO(NIO2)区别 What does network pr...

  • NIO教程 ——检视阅读(上)

    NIO教程 ——检视阅读 参考 BIO,NIO,AIO 总结 Java NIO浅析 Java NIO 教程——极客...

  • Java IO相关

    一Java中的IO机制 BIO NIO AIO 二 BIO 主要实现方式 : InputStream和Output...

  • 网络/IO基础

    一、BIO、NIO、AIO的概念 BIO,NIO,AIO的理解1BIO,NIO,AIO的理解2概念解释一个IO操作...

  • Java AIO-Proactor模式

    Java7之前只支持BIO、NIO,但在Java 7 时添加了Java AIO,Java AIO基于epoll模式...

  • 初识NIO之Java小Demo

    Java中的IO、NIO、AIO: BIO:在Java1.4之前,我们建立网络连接均使用BIO,属于同步阻塞IO。...

  • Java IO方式

    导语 这里我们说一下java几种IO方式,AIO,NIO,BIO的区别。 IO类型的组合模式 同步阻塞 java ...

  • BIO、NIO、AIO整理

    Java对BIO、NIO、AIO的支持: Java BIO (blocking I/O): 同步并阻塞,服务器实现...

网友评论

    本文标题:JAVA中AIO、BIO、NIO的区别

    本文链接:https://www.haomeiwen.com/subject/avljuftx.html