课件和 Demo 地址
https://gitee.com/geektime-geekbang/geek_netty
作者回复: 不知道你是不是有点误解了,给一个handler设置线程池,只对那个绑定的handler有效,对其他的处理无效,比如接受连接,还是用默认的nio event loop group.
作者回复: 前面一句话,你说的感觉不太合理,如果你的业务线程已经不是复用IO线程(读取数据/响应数据)的时候,你增加NioEventLoopGroup的线程数意义不大,因为它等于纯处理IO事件了,用默认的就行,相当于属于CPU密集型了,增大线程数可能起反作用; 后面一句话合理,补充一点,单独独立出来后,还有个好处是可以和IO的处理的线程分开。
作者回复: 其实大多都是应该如此调整的,或者做类似的单独定义线程池的,为什么?因为我们的业务大多都是io密集型或者较长返回的,但是呢,业务不属于netty层,所以他不会提前帮我们定义好,所以我们自己才要定义下,实际中,我们用的大都是自己单独定义一个线程池,而不是netty自带的(用它也没问题),就是ppt提的另外一种,因为可以随心所欲。
作者回复: 在传入参数nioeventloop情况下,还是不会的,主要和这个参数pinEventExecutor(ChannelOption.SINGLE_EVENTEXECUTOR_PER_GROUP)有关系,childExecutors.get(group)这个key是group,并不是channel,所以多个channel触发的服务器处理,还是单个EventExecutor。
作者回复: 估计你问的是非netty自带的线程池的方式,你把消息和ctx一起封装成一个新对象比如Task传给线程池,然后消息执行完成后。就可以直接用ctx来写了,那个就有绑定的channel.