Netty学习总结(6)——Netty使用注意事项

来源:互联网 发布:python ipython 编辑:程序博客网 时间:2024/05/22 00:35

什么是netty?

1、Netty 采用了Reactor模型(异步非阻塞)取代Selector模式(同步非阻塞)

Reactor模式是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers;这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler,Request Handler的操作都是异步的,在此期间程序可以向下继续执行,而通过Future-Listener机制可以将相应的处理状态回调。

Netty 快速入门解析

Reactor多线程模型

Netty 快速入门解析

Reactor主从模型

主Reactor用于响应连接请求,从Reactor用于处理IO操作请求!

Netty 快速入门解析

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 快速入门解析

  • Netty Client Handler

Netty 快速入门解析

  • Netty服务端代码

Netty 快速入门解析

  • Netty Server Handler

Netty 快速入门解析

我们从Netty服务器代码来看,与Reactor模型进行对应!

  • EventLoopGroup就相当于是Reactor,bossGroup对应Reactor,workerGroup对应从Reactor

  • TimeServerHandler就是Handler

  • child开头的方法配置的是客户端channel,非child开头的方法配置的是服务端channel


Netty也要注意几个关键点

1.Handler里面不要做费时的IO/计算操作,最好是自己添加线程池处理比较费时的IO/计算

2.ChannelOption一定要注意设置ChannelOption.WRITE_BUFFER_LOW_WATER_MARK和ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK

3.注意以上两点服务器的性能和内存都会得到比较好的控制。

原创粉丝点击