BoneCP 中分区计数的更好解释

2022-09-04 19:38:41

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

分区计数为了减少锁争用,从而提高性能,每个传入的连接请求都会从具有线程相关性的池(即 pool[threadId % partition_count])中选取一个连接。此数字越高,对于具有大量短期线程的情况,性能就越好。超过某个阈值,这些池的维护将开始对性能产生负面影响(并且仅适用于分区上的连接开始耗尽的情况)。

默认值:2,最小值:1,建议:3-4(但非常特定于应用)

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


答案 1

因此,在内部,BoneCP具有连接池的分区计数数。每次线程尝试使用连接时,它都会采用该池中的连接并与之一起工作。您将总共拥有多个连接。thread.getId() % partitionCountmaxConnectionsPerPartition * partitionCount

为什么这对性能有积极的影响?好吧,为了不在同一连接上同时使用两个线程(显然这很糟糕),BoneCP必须采取锁定来释放或获取连接。但与此同时,所有其他想要执行相同操作的线程都必须等待该锁。因此,从某种意义上说,您可以并行释放或获取连接数。partitionCount

将其设置为什么数字?我认为内核数量是一个良好的开端,因为无论如何,您都不会有更多的工作并行进行。但除此之外,尝试预测有多少线程将竞相连接,测量和重复。

顺便说一句,世界上大多数国家十多年来一直依赖c3po,并且基本上将分区计数设置为1。所以你不能出错。


答案 2

推荐