diff --git a/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java b/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java index 66fe2961c..56509c67b 100644 --- a/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java +++ b/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java @@ -144,11 +144,11 @@ public class MultiBurst extends MultiBurstSupport { } static int plannerParallelism() { - return plannerParallelism(MultiBurstSupport.performanceProcessors()); + return plannerParallelism(MultiBurstSupport.performanceProcessors(), Runtime.getRuntime().availableProcessors()); } - static int plannerParallelism(int performanceProcessors) { - return Math.max(4, performanceProcessors); + static int plannerParallelism(int performanceProcessors, int availableProcessors) { + return Math.max(2, Math.min(Math.max(4, performanceProcessors), availableProcessors)); } @Override diff --git a/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java b/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java index bd0aca932..e26aecbd9 100644 --- a/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java +++ b/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java @@ -63,9 +63,17 @@ public class HydrologyBurstTest { @Test public void plannerPoolFollowsThePerformanceCores() { - assertEquals(12, MultiBurst.HydrologyBurst.plannerParallelism(12)); - assertEquals(4, MultiBurst.HydrologyBurst.plannerParallelism(1)); - assertEquals(32, MultiBurst.HydrologyBurst.plannerParallelism(32)); + assertEquals(12, MultiBurst.HydrologyBurst.plannerParallelism(12, 16)); + assertEquals(4, MultiBurst.HydrologyBurst.plannerParallelism(1, 8)); + assertEquals(32, MultiBurst.HydrologyBurst.plannerParallelism(32, 32)); + } + + @Test + public void plannerPoolNeverOutgrowsASmallHost() { + assertEquals(2, MultiBurst.HydrologyBurst.plannerParallelism(1, 1)); + assertEquals(2, MultiBurst.HydrologyBurst.plannerParallelism(2, 2)); + assertEquals(3, MultiBurst.HydrologyBurst.plannerParallelism(3, 3)); + assertEquals(4, MultiBurst.HydrologyBurst.plannerParallelism(2, 4)); } @Test