见过各种连接池,有的连接池耗尽后,会将自己挂起,不接受额外的连接获取请求。有的连接池连接耗尽后,有额外的连接获取请求过来了,会新建连接。
我想问的是,这两种行为,各自适用的场景是什么?
连接池是一种特殊的资源池,它用于管理应用程序的连接。当连接池耗尽时,它可以返回给应用程序,以便应用程序可以继续连接到数据库或其他资源。
防止死锁:当连接池中的连接数超过其最大值时,连接池可能会阻塞,直到连接池中的连接数下降到最大值。这可能会导致死锁,因为两个或多个应用程序都等待其他应用程序释放连接。为了避免死锁,连接池可以设置一个阈值,当连接池中的连接数超过这个阈值时,连接池将开始寻找新的连接,而不是阻塞。
资源利用率:连接池可以帮助应用程序更有效地使用数据库或其他资源。如果应用程序需要连接到数据库,而连接池中没有足够的连接,那么应用程序可能会被阻塞,直到连接池中的连接恢复。通过使用连接池,应用程序可以更有效地使用数据库或其他资源。
灾难恢复:在某些情况下,连接池可能需要在发生故障时恢复连接。例如,如果数据库服务器发生故障,连接池中的连接可能无法恢复。在这种情况下,连接池可以设置一个恢复策略,当数据库服务器恢复时,连接池将自动恢复连接。
并发控制:连接池可以帮助应用程序控制并发连接的数量。如果应用程序正在使用过多的并发连接,那么连接池可能会耗尽,导致应用程序无法执行任务。通过使用连接池,应用程序可以控制并发连接的数量,以避免耗尽连接。
在选择连接池时,应考虑应用程序的需求、系统的性能、资源的可用性等因素。