为了避免出现内存碎片、减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx设计了简单的内存池。这个内存池没有很复杂的功能:通常它不负责回收内存池中已经分配出的内存。这种内存池最大的优点在于:把多次向系统申请内存的操作整合成一次,这大大减少了CPU资源的消耗,同时减少了内存碎片。因此,通常每一个请求都有一个这种简易的独立内存池(Nginx为每一个TCP连接都分配了1个内存池,而在第10章和第11章,并且HTTP框架为每一个HTTP请求又分配了1个内存池),而在请求结束时则会销毁整个内存池,把曾经分配的内存一次性归还给操作系统。这种设计大大提高了模块开发的简单性(在开发HTTP模块时,申请内存后都不用关心它释放的问题),而且因为分配内存次数的减少使得请求执行的时延得到了降低,同时,通过减少内存碎片,提高了内存的有效利用率和系统可处理的并发连接数,从而增强了网络性能。
网友评论