Od oficjalnego dokumentu BoneCP: http://jolbox.com/index.html?page=http://jolbox.com/configuration.htmlLepszym wytłumaczeniem partitionCount w BoneCP
partitionCount w celu zmniejszenia blokady rywalizacji, a tym samym zwiększenia wydajności, każde żądanie połączenia przychodzące odbiera się połączenia z puli, która ma wątek-powinowactwo, tj. puli [threadId% partition_count]. Im wyższa jest ta liczba, tym lepszy będzie Twój występ w przypadku, gdy masz dużo krótkich wątków. Po przekroczeniu pewnego progu zachowanie tych pul rozpocznie się ma negatywny wpływ na wydajność (i tylko w przypadku, gdy połączenia na partycji zaczynają się kończyć).
domyślna: 2, minimalna: 1, zalecane: 3-4 (ale bardzo specyficzna aplikacja)
Ale to nie jest tak jasne i nie ma dobrego przykładu. Prowadzę normalną usługę sieciową z równoczesnym wątkiem 0-500. Co to jest dobra wartość i dlaczego?
autor BoneCP tutaj: To wyjaśnienie jest idealne. Po prostu chciałbym dodać, że posiadanie większej liczby partycji oznacza również, że każda partycja ma zwykle mniej skonfigurowanych połączeń (ponieważ są one podzielone). Jeśli wątek spróbuje uderzyć w wyczerpaną partycję, to rozlewa się, aby spróbować nawiązać połączenie z innych partycji, więc w pewnym momencie zaczyna się wolniej. Jak twierdzą javadocs, trzymaj się maksymalnie 3-4 (nie ma też racji). – wwadge
@ user149789 i Mirko, więc dla tych z nas, którzy korzystają z naszych aplikacji opartych na JVM na mikroprocesorach chmurowych, gdzie pojedyncze rdzenie są normą, brzmi to tak, że partycja powinna być ustawiona na 1. Benchmarking dziś Zaskoczyło mnie, że max używane połączenia w moja baza danych nie była 48 (mam config 3 partitionCount * 16 maxConnectionsPerPartition), ale tylko 16 O_o – virtualeyes
Jeśli mam do czynienia z połączeniami równoległymi, aby wykonać co najmniej 2 operacje Statement i te połączenia będą ~ 30. Czy mógłbyś powiedzieć wielkości partycji - czy należy ustawić 30? Ponadto, gdybyś mógł powiedzieć inne parametry związane z ustawieniem BoneCPDataSource? – Sanchit