资源池

2011年3月29日

许多程序需要使用创建和维护成本高昂的资源。例如数据库连接和线程。资源池提供了一种管理这些资源的好方法。

当客户端需要使用数据库连接时,它不会自己创建连接,而是请求池提供一个连接。客户端使用完连接后,将其返回给池。池通常在启动时创建一堆连接。池的大小通常可以通过配置控制进行设置,并且可以根据客户端的需求量和维护资源的成本进行调整。

如果客户端请求新资源时所有资源都处于使用状态,则有几种不同的响应方式。一种是抛出异常,另一种是让客户端等待直到有资源可用。通常,如果可能,最好的响应是通过创建更多连接来扩展池。这样,池可以设置为较小的初始大小,并在需要时增长。如果你这样做,你可能需要一种机制来查看是否有许多资源处于空闲状态,然后在资源难以保留的情况下缩减池。即使使用动态增长,你可能仍然需要对池的大小设置一些限制,在这种情况下,你不希望池进一步增长。

在资源池中经常遇到的一个问题是客户端没有归还资源,这会导致资源泄漏。解决这个问题的一个好方法是在测试期间将池限制设置为 1,并将池配置为在达到限制时请求资源会引发异常。这使得更容易找到有泄漏的客户端。

有关资源池的更多信息,请参阅 POSA 3 中的池化模式。