BIO、 NIO 、 AIO 区别:
BIO 同步阻塞:发起请求->一直阻塞->处理完成。特点:比较耗时,线程资源浪费。
NIO 同步非阻塞:Selector主动轮询channel->处理请求->处理完成。特点:比较高效。
AIO异步非阻塞:发起请求->通知回调。
使用NIO所遇到的问题:
类库和API比较复杂。需要java多线程的知识,网络阻塞,处理难度大。存在内置bug,所以现在都使用netty。
netty三种线程模型
netty提供了三种线程模型:
单线程模型:所有的IO操作都是有同一个NIO线程处理的。大负载,高并发不适用。
多线程模型:由一组NIO处理IO操作,一个NIO处理请求,一个线程池处理IO。百万级以上并发不适用。
主从线程模型:一组线程池接收请求,一组线程池处理IO。