Java中IO、BIO、NIO和AIO的理解

1.相关概念

  1.  同步:使用同步时,Java自己处理IO读写
  2. 异步:使用异步时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,完成后OS通知Java处理(回调)。
  3. 阻塞:使用阻塞IO时,Java调用会一直阻塞到读写完成才返回。
  4. 非阻塞:使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成。

2.基本概念

  1. IO:阻塞IO。
  2. BIO:同步阻塞IO。服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器需要启动一个线程进行处理,如果这个链接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
  3. NIO:同步非阻塞IO。服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这需要用户进行不停的去询问。NIO的包括三个核心概念:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。
  4. AIO:异步非阻塞IO。最大的特性时具有异步能力,这种能力对socket与文件I/O都起作用。AIO其实是一种在读写操作结束之前允许进行其他操作的I/O处理。

3.应用场景

  • 并发连接数不多时采用BIO,因为它编程和调试都非常简单,
  • 如果涉及到高并发的情况,应选择NIO或AIO。

参考:https://blog.csdn.net/qq_28323595/article/details/88909278

          https://blog.csdn.net/m0_38109046/article/details/89449305?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章