说说 Netty 的对象池技术?

对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念。对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数。池化技术最终要的就是重复的使用池内已经创建的对象。从上面的内容就可以看出对象池适用于以下几个场景:

  • 创建对象的开销大;
  • 会创建大量的实例;
  • 限制一些资源的使用。

Netty 自己实现了一套轻量级的对象池。在 Netty 中,通常会有多个 IO 线程独立工作(基于 NioEventLoop 实现)。每个 IO 线程轮询单独的 Selector 实例来检索 IO 事件,并在 IO 来临时开始处理。最常见的 IO 操作就是读写,具体到 NIO 就是从内核缓冲区拷贝数据到用户缓冲区或者从用户缓冲区拷贝数据到内核缓冲区。这里会涉及到大量的创建和回收 Buffer, Netty 对 Buffer 进行了池化从而降低系统开销。

发表评论

后才能评论