首页 > 为什么NIO的性能比IO好?

为什么NIO的性能比IO好?

我目前已知的原因只有这1个: 就是由于NIO采用缓冲区+通道的方式来传输数据, 而不是IO包的以字节或字符为单元传输数据, 增加了一次处理数据的字节数, 而且这种方式更接近于底层操作系统的IO方式, 所以速度明显优于IO;

除了这一点还有其他的吗?


假设在下面的场景中:在一台4核的机器上,接收网络的请求,处理业务逻辑,将处理结果返回给客户端,其中网络请求1万/s,在业务逻辑处理中,有写入文件的操作,需要阻塞5秒的处理时间,假设传输不耗费时间。

1.使用BIO处理:

由于业务逻辑处理中的IO时间较长,会阻塞掉处理线程,在多请求的情况下,一个请求就产生一条线程来处理业务,那么在5s内,需要有5万条线程存在系统中,用于处理业务逻辑。CPU会有大部分的资源用于处理线程调度。

2.使用NIO处理:
在NIO中的IO操作是异步的,不会阻塞业务逻辑线程,在多请求的情况下,开启4条业务线程,一条线程占用一个CPU核心,业务线程可以全速处理业务逻辑。对于业务中IO操作,可以在硬件中异步处理,在数据准备好的时候才发送消息给CPU进行后续业务处理,那么此时只需要4条线程就可以高效的处理业务,而CPU几乎没有闲置,不需要耗费资源在线程调度中。


0zhangzhun132·刚刚

1.io是面向流的,也就是读取数据的时候是从流上逐个读取,所以数据不能进行整体以为,没有缓冲区;nio是面向缓冲区的,数据是存储在缓冲区中,读取数据是在缓冲区中进行,所以进行数据的偏移操作更加方便
2,io是阻塞的,当一个线程操作io时如果当前没有数据可读,那么线程阻塞,nio由于是对通道操作io,所以是非阻塞,当一个通道无数据可读,可切换通道处理其他io
3,nio有selecter选择器,就是线程通过选择器可以选择多个通道,而io只能处理一个

纯手打,希望对你有帮助

EOF


1.nio做了内存映射,少了一次用户空间和系统空间之间的拷贝
2.nio是异步,触发式的响应,非阻塞式的响应,充分利用了系统资源,主要是cpu


<h1>嘿嘿</h1>


无论是IO还是NIO,都是Linux网络I/O模型的一种体现,建议学习下Linux网络模型。

【热门文章】
【热门文章】