Arena是什么
-
在Netty中,Arena是一种内存分配器(Memory Allocator)的概念。Arena的主要目的是提高内存分配和释放的效率,减少碎片化,从而提高系统性能。
-
具体而言,Netyy中的Arena主要用于分配和管理ByteBuf对象的内存,ByteBuf是Netty中用于处理字节数据的缓冲区类.Arena在这里的作用是为ByteBuf提供内存块,以避免频繁地进行直接内存分配和释放。
-
Arena的实现通常采用了一些内存池技术,例如Chunked Memory Pool。它将内存分割成固定大小的块(Chunk)当需要分配内存时,会从这些块中选择合适大小的块进行分配,而不是每次都直接向操作系统申请新的内存.这样做可以减少内存碎片化,提高内存的利用率,也能够更有效地进行内存回收
-
Netty的Arena实现是为了优化网络应用程序中频繁的数据传输操作,特别时在高并发的情况下。通过使用Arena,Netty可以更高效地管理和利用内存,从而提高系统的性能
什么是水平触发(LT)和边缘触发(ET)?
-
LT(level_triggered,水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完,那么下次调用epoll_wait()时,它还会通知你在上一个没读写完的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你
-
ET(Edge_triggered,边缘触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据全部读写完,那么下次调用epoll_wait()时,它不会通知你,也就是它只会通知你一次,直到该文件描述符上出现第二次可读写事件才会通知你,这种模式比水平触发效率高,系统不会充斥大量你不关心的就绪文件描述符.
-
select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型支持水平触发,也支持边缘触发,默认是水平触发,JDK中的select()实现是水平触发,而Netty提供的epoll的是实现中是边缘触发