anchor.diff:  [[customSolutionPartitioner]]
   === Custom SolutionPartitioner
   
  -To use a custom partitioner, configure a partitioner on the Partitioned Search phase:
  +To use a custom `SolutionPartitioner`, configure one on the Partitioned Search phase:
   
   [source,xml,options="nowrap"]
   ----
  
positive.code: [[runnablePartThreadLimit]]
  == Runnable Part Thread Limit
  
  When running a multi-threaded solver, such as Partitioned Search, CPU power can quickly become a scare resource,
  which can cause other processes or threads to hang or freeze.
  Luckily, Planner has a system to prevent CPU starving of
  other processes (such as an SSH connection in production or your IDE in development)
  or other threads (such as the servlet threads that handle REST requests).
  
  As explained in <<sizingHardwareAndSoftware, sizing hardware and software>>,
  each solver (including each child solver) does no IO during `solve()` and therefore saturates 1 CPU core completely.
  In Partitioned Search, every partition always has its own thread, called a part thread.
  It is impossible for 2 partitions to share a thread,
  because of <<asynchronousTermination,asynchronous termination>>: the second thread would never run.
  Every part thread will try to consume 1 CPU core entirely, so if there are more partitions than CPU cores,
  this would hang the system.
  `Thread.setPriority()` is often too weak to solve this hogging problem, so another approach is used.
  
  The `runnablePartThreadLimit` parameter specifies how many part threads are runnable at the same time.
  The other part threads will temporarily block and therefore temporarily won't consume any CPU power.
  So *it basically specifies how many CPU cores are donated to Planner*.
  All part threads share the CPU cores in a round-robin manner
  to consume (more or less) the same number of CPU cycles:
  
  
negative.code: * `UNLIMITED`: Allow Planner to occupy all CPU cores, do not avoid hogging.
  Useful if a no hogging CPU policy is configured on the OS level.
  * `AUTO` (default): Let Planner decide how many CPU cores to occupy. This formula is based on experience.
  It does not hog all CPU cores on a multi-core machine.
  * Static number: The number of CPU cores to consume. For example:
  +
  [source,xml,options="nowrap"]
  