请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

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

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

正在回答 回答被采纳积分+3

1回答

闪电侠 2018-06-19 07:07:02

你好

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

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

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