netty源码理解

问题:目前需要netty进行长连接交互,netty确实稳定性比较强,而且看介绍netty 是一个高性能、异步事件驱动的NIO框架,但遇到问题,长连接数量非常少,但之间传输需要大量的读写,发现写并发数量过大时,接收消息出现了延迟。
源码:
  ManagerServer.java

ConnectionServerInitializer.java
参考netty源码中线程的设计发现,netty的异步性体现在其IO上,对于海量的长连接可以通过
1) ManagerServer.java 中设置
EventLoopGroup workerGroup = new NioEventLoopGroup(100);--->100个处理channel的线程,默认为内核数量*2
2)ConnectionServerInitializer.java中设置
但发现结果如下:
其实一个长连接handeler的处理线程还是一个。
参看源码的线程处理发现,其实netty的高性能异步只是处理IO问题,handler业务处理还是串行执行的,若业务中有执行时间不确定的操作(如数据库操作),就会发生延时的问题(数据在排队,执行时间长,但不会丢失)。

参考netty对多线程的处理方式,现在才发现jdk5之后的线程神器Excutor.
ServerHandler.java改造前:
ServerHandler.java改造后(新增ServerHandlerExcutor.java):

因为内存允许,开了2000个线程也还刚刚的,到现在测试性能提升了1000倍以上,1s并发100加业务处理在100ms左右(业务也做了优化),至少如果不会出现某个业务操作慢而导致netty接收阻塞的问题,有种从便秘一泻千里的畅快感。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值