您的位置:首页 > 其它

NIO and BIO的点滴区别

2016-04-05 11:22 204 查看
前提条件:服务器资源有限,即可以有效利用的线程数量是有限的。

以socket为例,假设条件,线程数量:1个,请求数量:50个,单个请求处理时间:15ms,网络传输时间:3ms,且50个请求同时到达服务器。

1.在BIO模式下,当从socket中读取数据时,需要等待时间waittime(accept+read:after accepting,client sends data and then server reads data)。这个waittime就是线程资源的浪费。

   在NIO模式下,当从socket中读取数据时,如果没有可以读取的数据,那么这个线程就可以处理下一个socket是否有可读数据。

=>NIO模式下,比BIO节省了时间waittime<50*3=150ms,最大节约时间150-3=147ms。

(以上是简单计算,并不正确,请勿参考。)

2016.10.21:

accept -> read -> process -> write,

BIO模式下,如果step read里没有数据可读,就会发生阻塞,即使此时其他的socket是可读的。

NIO模式下,如果step read里没有数据可读,就会检查下一个,如果有可读的,就读取,然后继续读取或者处理。相对BIO,提高了CPU的利用效率,避免了不必要的等待时间。

总之,NIO就是优先处理已经准备好的socket,BIO就是把一个全部处理完之后再处理下一个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: