`

面试 BIO NIO AIO

 
阅读更多

面试 BIO  NIO  AIO

 

   1、 BIO       NIO       AIO

阻塞   是          否         否

同步   是          是         否

 

  可以参考  https://blog.csdn.net/m0_38109046/article/details/89449305

 

2、阻塞 :  指的是处理线程的阻塞

                    InputStream  的  read 方法是阻塞的 :jdk 文档里说:

                    This method blocks until input data is available, end of file is detected, or an exception is thrown.

                       当对 socket的输入流进行读取操作的时候 他会一直阻塞下去 知道发生如下的三种事件:

                                     有数据可读

                                     可用数据已经读取完毕

                                     发生空指针或者IO异常

                    

3、同步、异步:指的是调用者

 

 

4、BIO


BIO面向 Stream

一个连接对应一个处理线程

inputstream 的读是 阻塞的 

 

连接数很大时  处理线程变的很多。线程上下文切换是有性能损耗的。线程数大到一定程度,系统性能急剧下降。

继续增大并发 会导致内存溢出 创建线程失败等问题,最终导致进程宕机或僵死。

 

 

 

5、为了改进一连接一线程模型 引入了线程池

 


 不再是一个连接一个线程 变成 M:N

线程池 队列大小和线程数可以设置,可以控制资源的使用 避免资源耗尽宕机

但 这本质上 还是  BIO   仍然是同步阻塞的。

 

 

6、NIO 

jdk  1.4  引入

 

 

 



NIO 面向Buffer

socket通道类可以运行非阻塞模式并且是可选择

ServerChannel 注册到  Selector 

Selector 轮训 Channel 状态,满足状态再进行相应业务处理

 


 7、AIO

 

JDK1.7   也称NIO2.0

AIO 的 I/O 操作,有两种方式的 API 可以进行:

  • Future 方式;
  • Callback 方式。

  •  

 8、对比



 

 

 

 

 

 

 

 

 

 

  • 大小: 103.5 KB
  • 大小: 378.9 KB
  • 大小: 50.1 KB
  • 大小: 43.4 KB
  • 大小: 23.2 KB
  • 大小: 109.5 KB
  • 大小: 107.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics