Java-Netty多线程编程

netty的线程模型 设置最佳实践

(1)创建两个NioEventLoopGroup,隔离NIO Acceptor和NIO的IO线程。

(2)尽量不要在ChannelHandler中启动用户线程(解码之后,将POJO消息派发到后端的业务线程池除外)。

(3)解码要放在NIO线程调用的Handler中,不要放在用户线程中解码。

(4)如果IO操作非常简单,不涉及复杂的业务逻辑计算,没有可能导致阻塞的磁盘操作、数据库操作、网络操作等,可以再NIO线程调用的Handler中完成业务逻辑,不要切换到用户线程。

(5)如果IO业务操作比较复杂,就不要在NIO线程上完成,因为阻塞可能会导致NIO线程假死,严重降低性能。这时候可以把POJO封装成Task,派发到业务线程池中由业务线程处理,以保证NIO,线程被尽快的释放,处理其余的IO操作。

(6)可能导致阻塞的操作,数据库操作,第三方服务调用,中间件服务调用,同步获取锁,Sleep等

(7)Sharable注解的ChannelHandler要慎用

(8)避免将ChannelHandler加入到不同的ChannelPipeline中,会出现并发问题.


https://juejin.im/post/5bea1d2e51882523d3163657

https://www.infoq.cn/article/netty-concurrent-programming-analysis/

https://www.jianshu.com/p/32fc02299232

http://www.linkedkeeper.com/137.html

https://blog.csdn.net/u010853261/article/details/5580521

你可能感兴趣的:(Java-Netty多线程编程)