PooledByeBufAllocator中arena的大小默认值是cpu的两倍和在创建worker线程的大小有关系吗?

来源:7-6 PooledByteBufAllocator概述

慕粉3520842

2018-06-27

在创建worker线程的时候,如果不给线程数,创建的默认也是cpu核心数两倍的NioEventLoop,老师这里说的是不是和arena的大小和NioEventLoop是对应的吗?如果是对应的,这两个有什么关系,为什么要做对应了,还有就是假如我设置了worker的NioEventLoop和arena大小不一致,比如我NioEventLoop是10, 而arena是4会导致什么情况呢,谢谢老师解答一下!!

写回答

1回答

闪电侠

2018-06-27

默认情况下,如果内存较大的化,两者是一一对应的,一个NioEventLoop对应一个arena,关于全局area个数的计算参考PooledByteBufAllocator类中的DEFAULT_NUM_DIRECT_ARENA,与系统总内存大小也有关系,大多数情况下是2*cpu,与NioEventLoop个数保持一致

如果NioEventLoop个数大于area个数,那么势必会有多个NioEventLoop共享一个area,这样的话就会有多线程竞争同一个area来分配内存,造成性能下降

0
1
慕粉3520842
非常感谢!
2018-06-28
共1条回复

Java读源码之Netty深入剖析

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

2334 学习 · 283 问题

查看课程