一、NIO应用场景
1、写爬虫
2、做通讯服务器就经常有用,还有些自定义的socket接口什么的。不过现在其实框架很多了。
3、比如游戏服务端
4、与传统IO的优势
在老的IO包中,serverSocket和socket都是阻塞式的,因此一旦有大规模的并发行为,而每一个访问都会开启一个新线程。这时会有大规模的线程上下文切换操作(因为都在等待,所以资源全都被已有的线程吃掉了),这时无论是等待的线程还是正在处理的线程,响应率都会下降,并且会影响新的线程。
而NIO包中的serverSocket和socket就不是这样,只要注册到一个selector中,当数据放入通道的时候,selector就会得知哪些channel就绪,这时就可以做响应的处理,这样服务端只一个线程就可以处理大部分情况(当然有些持续性操作,比如上传下载一个大文件,用NIO的方式不会比IO好。
二、华为NIO架构
1. BIO模型存在的问题
传统同步阻塞通信面临的主要问题如下:
1) 性能问题:一连接一线程模型导致服务端的并发接入数和系统吞吐量受到极大限制;
2) 可靠性问题:由于I/O操作采用同步阻塞模式,当网络拥塞或者通信对端处理缓慢会导致I/O线程被挂住,阻塞时间无法预测;
3) 可维护性问题:I/O线程数无法有效控制、资源无法有效共享(多线程并发问题),系统可维护性差
2. 以Netty为代表的NIO框架已经成熟
1、Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架avro使用Netty作为底层通信框架;很多其他业界主流的RPC框架,也使用Netty来构建高性能的异步通信能力。
2、