写点什么

java 的 IO 模型分类和特点

作者:zarmnosaj
  • 2022-10-17
    四川
  • 本文字数:634 字

    阅读完需:约 1 分钟

IO 模型的分类

Java 中的 IO 方式大体上可以分为三类:BIO:同步且阻塞 NIO:同步非阻塞 AIO:异步非阻塞

BIO

BIO 指的是同步且阻塞型 IO,特点是在进行 IO 操作时,比如在读取或者写入时,只要读取动作/写入动作开始,线程就会一直阻塞,一直等待到读取/写入动作完全执行完成后,线程才会从阻塞状态中恢复。


对于服务器,实现模式是客户端每有一个连接进来,就会创建一个线程,这样实现会造成资源的浪费,因为客户端如果连接进入后,就算不实现任何逻辑,处理任何 IO,也会占用服务器的资源。

NIO

NIO 指的是同步非阻塞型 IO,特点一个线程可以处理多个请求,不像是 BIO 一个连接创建一个线程,这种处理模式叫做多路复用,客户端的连接请求都会到多路复用器,多路复用器会自动轮询,获取到连接有 I/O 请求就会处理。 但是线程在处理 IO 请求时也会进入阻塞状态。

AIO

AIO 是 NIO 的升级版,指的是异步非阻塞 IO,只有收到客户端有效的请求,服务器才会启动线程,并且在处理 IO 请求时,不会阻塞当前线程,当后台处理完成 IO 操作后,会通知相应的线程,进行后续的处理。

总结

BIO 由于相对相率最低,而且由于同步阻塞的特性,只适用于连接数较小,且 IO 操作对象不是很大的场景,并且对服务器的资源强相关。


NIO 方式适用于连接数较多的场景,因为就算连接数增长,服务器也不会启动很多的线程占用资源,但是由于处理的线程数不多,对于每个请求的处理时间就有要求,平均处理时间不能太长,不然其他请求排队等待,也会形成阻塞的现状。


AIO 适合用于连接数目多,且处理时间长的场景,底层会利用到操作系统参与。

发布于: 刚刚阅读数: 3
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020-02-06 加入

成都后端混子

评论

发布
暂无评论
java的IO模型分类和特点_10月月更_zarmnosaj_InfoQ写作社区