bio是流式的,看源码你会发现,最终都调用read()方法,也就是一个字节一个字节地读;
nio是块式的,一块一块地读写。
操作系统的文件系统是块式的,所以一般来说,nio更快。
nio是块式的,一块一块地读写。
操作系统的文件系统是块式的,所以一般来说,nio更快。
解决方案 »
- Java 动画的问题 求高手指点
- 在ActionListener中获取直线坐标画直线出错了
- 各位高手,怎样使线程暂停,再唤醒?
- java application 如何连接到服务器,并对数据库进行操作?
- 请教 使用jdbc 连接 sql server 2000的性能比较
- 关于mysql数据库的查询表格显示在java的图形界面上
- 有人知道Jindent的用法吗?
- 在tomcat里webapps文件夹我加了个我的程序,双击startup出错
- 搞了一个星期了,真的急死我了,请各位大哥大姐帮帮忙!看看我的关于查询数据库的问题!一定加分!
- 这个能实现吗
- 请问JAVA如何编写多线程共享一个变量?注意是不同的构造函数做出的线程。
- 新手小问题求解答
没区别。io/nio的主要区别在异步和同步的调用,性能差异主要在多连接的处理上。
没区别。io/nio的主要区别在异步和同步的调用,性能差异主要在多连接的处理上。没区别的判定太武断了。从理论上来说,传统的io用的是设备中断方式,读写数据是以「字」为单位的(注意是字,不是字节),一般来说64位系统,中断一次也就能读1个字;如果使用nio方式,Java会尽量使用贴近操作系统的,更优化的方式,比如DMA方式,或者通道方式,去读写数据,这样的话,处理至少是以块为单位的,并且CPU基本上处于放权的状态,直到数据全部加载进内存,CPU才会去要回控制权。所以在现代操作系统中,一般NIO都会比IO快。
没区别。io/nio的主要区别在异步和同步的调用,性能差异主要在多连接的处理上。没区别的判定太武断了。从理论上来说,传统的io用的是设备中断方式,读写数据是以「字」为单位的(注意是字,不是字节),一般来说64位系统,中断一次也就能读1个字;如果使用nio方式,Java会尽量使用贴近操作系统的,更优化的方式,比如DMA方式,或者通道方式,去读写数据,这样的话,处理至少是以块为单位的,并且CPU基本上处于放权的状态,直到数据全部加载进内存,CPU才会去要回控制权。所以在现代操作系统中,一般NIO都会比IO快。
个人认为,你写的这段还需要再回炉重新学习一下相关的理论知识,尤其是你说的那个一般来说那一句话。实际上来说,程序的效率更多取决于程序员的水平和实际的业务场景。具体用不用nio,看是不是有这个必要。
没区别。io/nio的主要区别在异步和同步的调用,性能差异主要在多连接的处理上。没区别的判定太武断了。从理论上来说,传统的io用的是设备中断方式,读写数据是以「字」为单位的(注意是字,不是字节),一般来说64位系统,中断一次也就能读1个字;如果使用nio方式,Java会尽量使用贴近操作系统的,更优化的方式,比如DMA方式,或者通道方式,去读写数据,这样的话,处理至少是以块为单位的,并且CPU基本上处于放权的状态,直到数据全部加载进内存,CPU才会去要回控制权。所以在现代操作系统中,一般NIO都会比IO快。
个人认为,你写的这段还需要再回炉重新学习一下相关的理论知识,尤其是你说的那个一般来说那一句话。实际上来说,程序的效率更多取决于程序员的水平和实际的业务场景。具体用不用nio,看是不是有这个必要。「一般来说」的说法,是因为现代操作系统大多都提供DMA和通道方式去读写块式设备,但是不排除某些操作系统不支持,或者硬件不支持。而且Java也只是说尽可能贴近操作系统的实现去做NIO,它也不保证。所以我使用了「一般来说」这个用词。还有,不要动不动就让人「回炉学习」,你至少得贴一个说得过去的理由吧。实际上这部分,你在转移话题。就题主给的问题来说,NIO确实比IO有优势,尤其是处理大块数据的时候。
抱歉,确实错了。一次中断,确实不是一个字,但是CPU读取一次数据是一个字。
一次中断,一般是一个磁盘缓冲区塞满。
但CPU读磁盘缓冲区中的数据是一个字一个字读的,而DMA传输数据一次就是一个磁盘缓冲区。
还是NIO快。
抱歉,确实错了。一次中断,确实不是一个字,但是CPU读取一次数据是一个字。
一次中断,一般是一个磁盘缓冲区塞满。
但CPU读磁盘缓冲区中的数据是一个字一个字读的,而DMA传输数据一次就是一个磁盘缓冲区。
还是NIO快。
其实,我想告诉你的事情是,nio相对于io来说,得到最关键的提升还是异步IO在网络处理性能上的。而中断和CPU读数据,是两件事。
至于是流方式比较快还是块方式比较快,这个没有测试过,普遍的理论都认为是块方式比较快。
在读取文件方面,小文件用传统IO,大文件用NIO。在处理网络连接方面,优先选择NIO。
对性能有点要求的服务器侧的网络,必须用NIO。对网络连接数量上没有要求的客户端程序,建议还是IO,开发调试起来比较快一点。