前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IO和NIO

IO和NIO

作者头像
红目香薰
发布2022-11-29 09:25:49
1650
发布2022-11-29 09:25:49
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode

1、主要区别:

io是面向流、阻塞的。 Nio是面向缓存、非阻塞的。 传统IO基于字节流和字符流进行操作。 NIO基于Channel(通道)、Buffer(缓冲区)进行操作,数据从通道读取到缓冲区中,或者从缓冲区读取到通道中。 NIO中使用Selector(选择区)监听多个Channel(通道)事件,因此单个线程可以监听多个数据通道。(比如:连接打开,数据到达)

2、IO 工作流程:

由于Java IO是阻塞的,所以当面对多个流的读写时需要多个线程处理。例如在网络IO中,Server端使用一个线程监听一个端口,一旦某个连接被accept,创建新的线程来处理新建立的连接。其中 read/write 是阻塞的。

3、NIO 工作流程:

NIO 提供 Selector 实现单个线程管理多个channel的功能。select 调用可能是阻塞的,也可以是非阻塞的。但是read/write是非阻塞的!

4、NIO为什么会被阻塞:

代码语言:javascript
复制
//这个方法可能会阻塞,直到有一个已注册的事件发生,或者当一个或者更多的事件发生时
//可以设置超时时间,防止进程阻塞
selector.select(long timeout);

//使用此方法可以防止阻塞,阻塞在select()方法上的线程也可以立刻返回,不阻塞
selector.selectNow();

//可以唤醒阻塞状态下的selector
selector.wakeup();

5、BIO、NIO、AIO 有什么区别:

BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方 便,并发处理能力低。 NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道) 通讯,实现了多路复用。 AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的 操作基于事件和回调机制。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、主要区别:
  • 2、IO 工作流程:
  • 3、NIO 工作流程:
  • 4、NIO为什么会被阻塞:
  • 5、BIO、NIO、AIO 有什么区别:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档