Nginx的内存管理是通过内存池实现的。Nginx的内存池设计非常的精巧,很多场景下,我们可以将Nginx的内存池实现抽象出来改造成我们开发中内存池。
一般我们使用malloc/alloc/free等函数来分配和释放内存,会有一些弊端:
- 虽然系统自带的ptmalloc内存分配管理器,也有自己的内存管理方案(申请内存块以及将内存交还给系统都有自己的优化方案),但是直接使用malloc/alloc/free,仍然会导致内存分配的性能比较低。
- 频繁使用这些函数分配和释放内存,会导致内存碎片,不容易让系统直接回收内存。典型的例子就是大并发频繁分配和回收内存,会导致进程的内存产生碎片,并且不会立马被系统回收。
- 容易产生内存泄漏。
- 提升内存分配效率。不需要每次分配内存都执行malloc/alloc等函数
- 让内存的管理变得更加简单。内存的分配都会在一块大内存上,回收的时候只需要回收大块内存就能将所有的内存回收,防止了内存管理混乱和内存泄漏的问题。