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的是實現中是邊緣觸發