通过netty添加线程池与handler中添加的区别

来源:12-5 Netty应用级别性能调优过程

qq_yy_13

2018-06-18

通过netty添加线程池为什么说是handler的每一行代码都在一个单独的线程池里

不是指定了一个线程池然后里面多个线程哪来的多个,每行代码都要单独怎么分?

然后就是handler中新建对象分配内存为什么要需要共享,

新建对象给业务线程池分配内存那么池里面的线程也能拿到共享吧,为什么不能共享

写回答

1回答

闪电侠

2018-06-19

你好

对于第一个问题,指的是,如果使用Netty自定义线程池,那么Handler里面的方法的所有的代码都会在这个线程池里面执行,而自定义线程池可以更加细粒度控制,只把耗时的操作放到线程池中执行,其他的操作依然可以在reactor线程中执行,可能视频里面的描述让你产生误解了。

第二个问题,因为在Netty里面,每个线程都维护了自己的一个内存空间,自定线程池可以做到分配内存依然在Netty的reactor线程中执行,共享reactor线程的内存空间,而如果使用Netty自定义线程池,由于整体代码都在这个自定义的线程池里面去执行,所以内存分配相关的操作都在这个线程池的内存空间去进行,无法共享到reactor线程维护的内存空间,不过在这个自定义线程池内部来说,他的内存依然是可以共享的。

1
2
闪电侠
回复
鋒Nic
1.自定义线程池可以更加细粒度控制,只把耗时的操作放到线程池中执行,这里的耗时的操作是指那些操作: 这些操作本质上都是会阻塞线程的操作,比如数据库操作,文件读写操作,调用第三方服务,网络这类的操作,一旦reactor线程被堵住,这条reactor线程上其他所有的连接都会收到影响 2.而其他的操作依然可以在reactor线程中执行是指io操作放reactor线程中执行么 其他的操作指的是不会阻塞IO线程的操作,纯cpu操作通过情况下是比较快的,不要占用太多的线程时间即可 3.不过在这个自定义线程池内部来说,他的内存依然是可以共享的是指在自定义线程池里线程里线程与线程之间的内存空间是可以共享,然后自定义线程池与reactor线程是不共享内存空间的意思? 对的,是这个意思,自定义线程池内部,对于同一个线程来说,他的内存空间是共享的,不同线程之间,跨线程操作,内存也是不共享的,然后自定义线程池和reactor线程也是不共享内存的,其实只要记住一点,内存是ThreadLocal模式的就行啦
2018-06-20
共2条回复

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程