NIO是什么?适用于何种场景?

  • NIO与IO的最大区别就是:当读取数据的时候,NIO读取之后需要缓冲,是面向缓冲区的,而IO不需要缓冲,是面向流的。
  • IO是阻塞的:就意味着当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不会做任何事情。
  • NIO的非阻塞模式,使一个线程从某通道发送请求数据,但是它仅能得到目前可用的数据,如果没有适用的数据,就不会读取数据,而不是保持线程阻塞。线程通常将非阻塞IO的空闲时间用于在其他执行IO操作,所以一个单独的线程可以管理多个输入和输出通道。
  • java NIO选择器允许一个单独的线程来监视多个输入通道。

NIO和IO如何影响应用程序的设计

  • API调用,NIO读取数据时,必须先到缓存中再做处理。

  • 数据处理:

NIO处理数据:当数据全部到缓冲区时,就是当缓冲区满时,才能处理数据,如何判断缓存区已经满了呢?或者如何直到数据已经全部到达缓冲区了呢?我们需要判断,需要扫面缓冲区。其实很多情况下,我们获取部分数据就能开始处理,但是这样的情况,阻碍了我们处理。

  • 用来处理数据的线程数。NIO可以使用一个单独的线程来管理多个通道,但付出的代价就是解析数据可能会比从一个阻塞流中读取数据更复杂。如果需要管理成千上万的链接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。同样,如果你需要维持许多打开的连接到其他计算机上,如P2P网络中,使用一个单独的线程来管理你所有出战连接,可能时一个优势。
  • 如果你有少量的连接使用非常的宽带,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值