默认
发表评论 8
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
悬赏求教Java的NIO和IO的本质区别
阅读(50323) | 评论(8 收藏1 淘帖 1
10金币
传统io的读取磁盘数据比作:用水杯装水,nio则是用水桶装水。为什么io用水杯,而nio用水桶呢?这里产生盛水道具不同的原因是什么?
是不是nio底层实现(c++源码)就跟io的有本质区别?底层实现不同在哪里?

最佳答案

查看完整内容

这个问题网上答案一大堆,但是很多都是太理论化,很难懂。要真正讲清楚是需要对操作及底层的io工作方式和原理很了解才能真正透彻理解。 我个人理解是:传统的阻塞io所谓的面向流的方式,其实是所有早期程序的io读写方式,你不管是看汇编、c、还是比较现代的java、c++都是这样,换句话说高性能读写场景下,这种读写方式其实是过时的方式(但有些场景下还是必须得用这个),谁都知道内存操作是很快的,但早期的计算机内存都这么小 ...
标签:NIO
上一篇:各位对新装IM登录时有大量联系人(比如1W以上)的情况怎么处理的下一篇:求助电脑和手机之间的消息推送技术实现
推荐方案
评论 8
这个问题网上答案一大堆,但是很多都是太理论化,很难懂。要真正讲清楚是需要对操作及底层的io工作方式和原理很了解才能真正透彻理解。

我个人理解是:传统的阻塞io所谓的面向流的方式,其实是所有早期程序的io读写方式,你不管是看汇编、c、还是比较现代的java、c++都是这样,换句话说高性能读写场景下,这种读写方式其实是过时的方式(但有些场景下还是必须得用这个),谁都知道内存操作是很快的,但早期的计算机内存都这么小,所以这种以“流”这主的io方式也是必然选择。而现在内存越来越大,现在操作系统顺应了这种潮流:也就是NIO所谓的“块”读写,也就是利用操作系统的底层代码,高效地把数据成块地读到内存中,而由NIO的selector决定何时放到channel中,毫无疑问这个过程都是高速的:一是利用os自已的低层特性、二是利用大块内存的高效交换。

我说的不一定很准确,但大致是这么个意思,之前群主有发过一篇:Java新一代网络编程模型AIO原理及Linux系统AIO介绍,感觉讲的还行,但也是不太透彻,看看总归是有好处。这些新的IO特性都是跟操作系统紧密相关的(比如java里新出的AIO就是这样:老式的操作系统不支持,java也就玩不了)。

还有一篇文章很好,你也可以看看:http://www.ibm.com/developerworks/cn/education/java/j-nio/
签名: 国庆长假还没有缓过来,请让我静一静,产品狗死远点...
大家都知道NIO好,但真要讲清楚,真是不太容易,楼主是个爱钻研的童鞋
引用:IMDeveloper 发表于 2017-02-21 18:06
这个问题网上答案一大堆,但是很多都是太理论化,很难懂。要真正讲清楚是需要对操作及底层的io工作方式和原 ...

赞一个
我认为NIO应该是利用了操作系统的底层特性才有可能实现高性能,就像Ngnix利用Linux下的epoll这种异步IO才能干出这么逆天的负载一样。
签名: 该会员没有填写今日想说内容.
引用:IMDeveloper 发表于 2017-02-21 18:06
这个问题网上答案一大堆,但是很多都是太理论化,很难懂。要真正讲清楚是需要对操作及底层的io工作方式和原 ...

看起来离答案很近了。。。
签名: 该会员没有填写今日想说内容.
谢谢各位的回答,苟同二楼的回答。
签名: 该会员没有填写今日想说内容.
找到一篇文章,符合答案。
http://blog.csdn.net/szwangdf/article/details/10588489
签名: 该会员没有填写今日想说内容.
引用:木子凤 发表于 2017-02-24 10:48
找到一篇文章,符合答案。
http://blog.csdn.net/szwangdf/article/details/10588489

打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部