对象池与连接池

标签 object connection-pooling

对象池和连接池之间的确切区别是什么?他们利用内存的算法有什么不同吗?
msdn 说“对象池让你控制你使用的连接数,而不是连接池,你可以控制达到的最大数量。”
这究竟是什么意思?

请帮我澄清上面的内容。

最佳答案

连接池是包含连接对象的对象池。

"Object pooling lets you control the number of connections you use, as opposed to connection pooling, where you control the maximum number reached."



对象池允许应用程序在任何时候限制正在使用的实例数。如果应用程序需要的实例数超过限制,则对象池必须决定如何处理该问题。有多种可能的策略:
  • 返回空
  • 抛出异常
  • 阻塞直到实例可用
  • 增加池的大小

  • 连接池是一个对象池,因此它需要做出完全相同的决定。

    对象池(或连接池)的特定实现可以使用这些策略中的任何一种,或几种组合使用。

    在我看来,所引用的声明具有误导性,除非它是在谈论具体的实现。

    一个简单的对象池示例

    池有一些配置参数。一个简单的池可能有一个 minimum_size 和一个 maximum_size。当池首次可供使用时,它将包含 minimum_size 对象。当客户端请求这些对象时,池将包含更少的未分配对象。当客户端将对象返回到池中时,这个数字也会增加。

    在某些时候,池可能会达到一种状态,即它没有未分配的对象,但一个或多个客户端请求一个对象。此时,只要池没有达到maximum_size,它就可以创建一些新对象并将它们添加到池中。它现在可以将对象返回给客户端。

    如果池已达到maximum_size,则无法增加池的大小,因此它必须以不同的方式处理客户端——假设它抛出一个 ObjectPoolExhausted 异常。

    稍后,一些客户端将对象返回到池中,它可以照常进行,直到再次用完对象。

    返回问题

    MSDN文章说它的特定对象池实现会将池的大小增加到指定的最大值。当达到最大值时,与上面的例子不同,它不是抛出异常,而是让客户端等待,直到一个对象返回到池中,然后将新返回的对象交给等待的客户端。

    MSDN 文章说其特定的连接池实现没有最大大小参数 - 它会不断创建新连接以满足需求(最终它会达到某个系统限制并且请求将以某种未指定的方式失败)。

    关于对象池与连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324351/

    相关文章:

    c++ - 方法不可访问

    javascript - 只允许某些类型的属性

    附加到新对象的 Java 注释?

    java - 如何在java中做连接池?

    database - 如何计算数据库连接池的大小?

    java - 基础 - 排除 Hibernate/JDBC 连接池问题

    sql-server - Multi-Tenancy 应用程序中的 SQL Server 碎片连接池性能

    javascript - 如何动态替换javascript对象属性名

    javascript - 按数组循环遍历对象树

    java - 如何配置 hibernate 以使用特定于上下文的连接信息?