1、Netty 采用了Reactor模型(异步非阻塞)取代Selector模式(同步非阻塞)
Reactor模式是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers;这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler,Request Handler的操作都是异步的,在此期间程序可以向下继续执行,而通过Future-Listener机制可以将相应的处理状态回调。
Reactor多线程模型
Reactor主从模型
主Reactor用于响应连接请求,从Reactor用于处理IO操作请求!
2、Netty的高效并发编程主要体现在如下几点:
1) volatile的大量、正确使用;
2) CAS和原子类的广泛使用;
3) 线程安全容器的使用;
4) 通过读写锁提升并发性能。
3、Netty除了使用reactor来提升性能,当然还有
1、零拷贝,IO性能优化
2、通信上的粘包拆包
2、同步的设计
3、高性能的序列
Netty怎么用?1、ChannelInboundHandlerAdapter已被ChannelHandlerAdapter取代
2、channelActive()方法将会在连接被建立并且准备进行通信时被调用。
3、channelRead()方法将会在收到消息时被调用
-
Netty客户端代码
-
Netty Client Handler
-
Netty服务端代码
-
Netty Server Handler
我们从Netty服务器代码来看,与Reactor模型进行对应!
-
EventLoopGroup就相当于是Reactor,bossGroup对应Reactor,workerGroup对应从Reactor
-
TimeServerHandler就是Handler
-
child开头的方法配置的是客户端channel,非child开头的方法配置的是服务端channel
1.Handler里面不要做费时的IO/计算操作,最好是自己添加线程池处理比较费时的IO/计算
2.ChannelOption一定要注意设置ChannelOption.WRITE_BUFFER_LOW_WATER_MARK和ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK
3.注意以上两点服务器的性能和内存都会得到比较好的控制。