Java NIO

        作为C/C++程序员,初次听到Java NIO这个名词有点茫然。仔细学习了Java NIO的细节和用法,个人理解如下:

        其实Java NIO的功能对C程序员并不陌生,和我们经常接触的 select / poll / epoll 是类似的。本质上Java NIO在Linux 2.6内核之后就是通过epoll来实现。

        不论 Java NIO还是 C中的 select / poll / epoll, 其设计思路就是对传统的阻塞型 I/O 做补充完善,实现非阻塞 I/O;

        我们知道,在传统的阻塞型I/O中,accept()等待过程中若没有新的连接请求到来,就一直阻塞;请求读写过程在等待数据时也会阻塞。考虑到每来一个新连接通常需要开启一个新线程去处理,如果许多线程处在阻塞状态,无疑是对计算资源的浪费。

         Java NIO提供事件驱动的非阻塞型I/O,面对多个连接请求(不论是来自块设备还是Socket连接)的情况,可以把众多连接侦听放在一个或尽可能少的进程中进行管理,请求到达时则可以派发给相关线程处理。这对于处理高并发且所需响应时间很短的event,将会非常高效。

          当然,Java NIO还提供了所谓的块读写, 相比Java IO有优势。传统的Java IO, 程序需要生成Java对象(比较多的是String类型)来存储每次从连接中读到的数据,处理数据后这些临时的对象又要被释放。极端情况下,如果每次读取1字节数据,这种临时对象的创建和删除会相当低效。Java NIO提供了Buffer读写功能,数据从连接读出后直接存放到Buffer(缓存)中,无需字符串对象做中间存储,这就减少了不必要的性能和资源损耗。

          先总结这么多,若有不当之处还请Java高手指正。最后还是要Highlight 下IBM的高质量文档,下面这篇关于Java NIO入门的介绍非常经典,可以作为学习参考:

          http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值