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就是把一个全部处理完之后再处理下一个。
以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就是把一个全部处理完之后再处理下一个。
相关文章推荐
- Android跨进程通信(IPC)——AIDL
- 利用drozer进行Android渗透测试 - AndroSecurity
- poj 2485 Highways
- Apache Lucene 示例讲解全文搜索
- zookeeper 伪集群模式
- hdoj 2033 人见人爱A+B (水)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- ubuntu 下 eclipse Ctrl+Alt+Down 不工作
- MySql导入数据库
- ImageLoader的简单使用
- js中转换Date日期格式
- zookeeper 伪集群模式
- 最小生成树(Minimum Spanning Tree)(Prim算法)
- 大型网站之网站静态化(综合篇)
- sql server生成脚本
- 浏览器快捷键
- 一些面试题的思路逻辑
- Windows下msysGit使用及相关配置
- SegmentControl的基本设置
- OC与swift的相互调用