@Test public void testCollectInParallel() { assertEquals(1, maxActiveCollect(1, 1, false)); assertEquals(1, maxActiveCollect(1, 1, true)); assertEquals(1, maxActiveCollect(4, 1, false)); assertEquals(1, maxActiveCollect(4, 1, true)); int cores = Runtime.getRuntime().availableProcessors(); assertEquals(Math.min(cores, 4), maxActiveCollect(4, 4, false)); assertEquals(4, maxActiveCollect(4, 4, true)); }
@Test public void testDoInParallel() { assertEquals(1, maxActive(1, 1, false)); assertEquals(1, maxActive(1, 1, true)); assertEquals(1, maxActive(4, 1, false)); assertEquals(1, maxActive(4, 1, true)); int cores = Runtime.getRuntime().availableProcessors(); assertEquals(Math.min(cores, 4), maxActive(4, 4, false)); assertEquals(4, maxActive(4, 4, true)); }
private static int maxActiveCollect(int numTasks, int parallelism, boolean privatePool) { Set<Integer> active = new HashSet<>(); AtomicInteger maxActive = new AtomicInteger(); Set<Integer> completed = ExecUtils.collectInParallel(numTasks, parallelism, privatePool, i -> { synchronized (active) { active.add(i); maxActive.set(Math.max(maxActive.get(), active.size())); } sleepSeconds(1); synchronized (active) { active.remove(i); } return i; }, Collectors.toSet()); assertEquals(numTasks, completed.size()); for (int i = 0; i < numTasks; i++) { assertTrue(completed.contains(i)); } return maxActive.get(); }
private static int maxActive(int numTasks, int parallelism, boolean privatePool) { Set<Integer> active = new HashSet<>(); AtomicInteger maxActive = new AtomicInteger(); ExecUtils.doInParallel(numTasks, parallelism, privatePool, i -> { synchronized (active) { active.add(i); maxActive.set(Math.max(maxActive.get(), active.size())); } sleepSeconds(1); synchronized (active) { active.remove(i); } }); return maxActive.get(); }