Netty多线程编程问题总结

(1)创建两个NioEventLoopGroup,用于逻辑隔离NIO Acceptor和NIO I/O线程
(2)尽量不要在ChannelHandler中启动用户线程(解码后用于将POJO消息派发到后端业务线程的除外)
(3)解码要放在NIO线程调用的解码Handler中进行,不要切换到用户线程完成消息的解码.
(4)如果业务逻辑操作非常简单(纯内存操作),没有复杂的业务逻辑计算,也可能会导致线程被阻塞的磁盘操作,数据库操作,网络操作等,可以直接在NIO线程上完成业务逻辑编排,不需要切换到用户线程.
(5)如果业务逻辑复杂,不要在NIO线程上完成,建议将解码后的POJO消息封装成任务,派发到业务线程池中由业务线程执行,以保证NIO线程尽快释放,处理其它I/O操作.
(6)可能导致阻塞的操作,数据库操作,第三方服务调用,中间件服务调用,同步获取锁,Sleep等
(7)Sharable注解的ChannelHandler要慎用
(8)避免将ChannelHandler加入到不同的ChannelPipeline中,会出现并发问题.


串行执行的ChannelHandler的工作原理.png

你可能感兴趣的:(Netty多线程编程问题总结)