当我们使用池资料分配时,我们会确信这些资源在某个时间点被清理缓存。但具体是什么时间呢?我们需要确保清理发生在正确的时间——既不是资源正在使用的时候,也不是在资源不再需要的很长时间之后。
Apache的池
庆幸的是Apache通过采取为不同类型的资源分配不同类型的池的方法,将这个过程得非常简单。这些池和httpd的相关结构结合起来,和相应的结构具有同样的生命周期。在Apache中,有四个通用意义的池可以使用。
请求池(requset pool),生命周期为HTTP请求的生命周期
进程池(process pool),生命周期为一个服务进程的生命周期
连接池(connection pool),生命周期为一个TCP连接的生命周期
配置池(configuration pool),
前三个池结合Apache的相关数据结构,分别通过request->pool和process->pool进行访问。第四个池也是和进程结合,通process->pconf进行访问,不过和进程池不同的是它将在Apache再次读取配置文件时进行清理。
进程池适合于长时间进行的资源,例如哪些在服务器启动时被初始化的资源。请求池适合于处理一个单一请求所使用的临时资源。
连接通常由一个或者多个请求组成,连接池的生命周期和连接时间。连接池对于不能和一个请求相结合的临时资源来说非常有用,最值得一提的是在一个连接层过滤器中,request_rec结构还没有定义,或者在一个非HTTP协议的处理函数中。
除了以上这些标准的池,还有一些为了某些原因特别创建的专业池,例如配置和审计,或者模块自己创建的、供自己使用的池。