NIO and BIO的点滴区别

前提条件:服务器资源有限,即可以有效利用的线程数量是有限的。

以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就是把一个全部处理完之后再处理下一个。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值