对象池设计模式问题

Object pool design pattern problem

本文关键字:问题 设计模式 对象      更新时间:2023-10-16

对于对象池,我们说每当客户端请求资源时,我们都会从池中提供。如果我签出了一个资源并更改了它的状态并将其签入。在下一个请求中会发生什么,池是让客户端签出该资源,还是该资源现在对池无效?

如果释放到池中的对象因重复使用而无效,那么该池将毫无意义。如果一个类需要初始化或重新初始化,可以在get()或release()池方法中进行。如果重新初始化需要的不仅仅是简单的分配(例如,一个5分钟内不能重复使用的套接字对象池),那么您可能不得不求助于一个专用的池管理器线程,该线程可以有效地将池拆分为几个水坑-那些可以重复使用的对象和那些等待重新初始化的对象。

Rgds,Martin

或者,在资源恢复到原始状态之前,您不应该将资源返回到池中。例如,假设您有一个web服务器,其中有一个侦听线程和一个由10个工作线程组成的池。侦听器线程接受传入的http请求,并将它们分派给工作线程进行处理。池中的工作线程(未签出)处于"原始"状态,即空闲或未处理请求。一旦侦听线程签出工作线程并向其提供http请求,工作线程就开始处理该请求;换句话说,它的状态是"工作"。一旦它处理完请求并向客户端发送了http回复,它就会再次"空闲"并返回到池中。因此,当前未从池中签出的所有线程始终处于其原始状态"空闲"。