BoneCP中partitionCount的更好解释

时间:2013-01-21 18:41:17

标签: java database bonecp

来自官方BoneCP文档:http://jolbox.com/index.html?page=http://jolbox.com/configuration.html

  

partitionCount 为了减少锁争用并提高性能,每个传入连接请求都会选择一个连接   来自具有线程亲和性的池,即池[threadId%   partition_count。这个数字越高,你的表现就越好   当你有很多短命线程时会出现这种情况。   超过一定的门槛,这些池的维护将开始   对性能有负面影响(仅适用于以下情况)   分区上的连接开始耗尽。)

     

默认值:2,最小值:1,推荐值:3-4(但非常适合应用)

但它不是那么清楚,没有一个很好的例子。我正在运行一个普通的Web服务,同时有0-500个线程。这是一个很好的价值,为什么?

1 个答案:

答案 0 :(得分:19)

因此,内部BoneCP具有连接池的分区计数。每次线程尝试使用连接时,都需要thread.getId() % partitionCount并使用该池中的连接。并且您将总共拥有maxConnectionsPerPartition * partitionCount个连接数。

为什么这会对性能产生积极影响?好吧,没有两个线程同时在同一个连接上使用(显然这会很糟糕),BoneCP必须锁定才能释放或获取连接。但同时所有其他想要做同样事情的线程都必须等待锁定。因此,从某种意义上说,您可以并行释放或获取partitionCount个连接数。

要设置的是什么号码?我认为核心数量是一个良好的开端,因为无论如何你都不会有更多的工作并行发生。但除此之外,尝试预测有多少线程将用于连接,测量和重复。

BTW,世界上大多数人一直依赖c3po超过十年,而且基本上将分区数设置为1.所以你不能错过它。