Trying to improve concurrent tests

pull/509/head
Rui Gu 9 years ago
parent 5e4267d5b6
commit d6e8d009bd

@ -2,76 +2,68 @@ package org.redisson;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
import org.junit.Assert; import org.junit.Assert;
import org.redisson.client.RedisClient;
public abstract class BaseConcurrentTest extends BaseTest { public abstract class BaseConcurrentTest extends BaseTest {
protected void testMultiInstanceConcurrency(int iterations, final RedissonRunnable runnable) throws InterruptedException { protected void testMultiInstanceConcurrency(int iterations, final RedissonRunnable runnable) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2); ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);
final Map<Integer, RedissonClient> instances = new HashMap<>();
final Map<Integer, RedissonClient> instances = new HashMap<Integer, RedissonClient>(); pool.submit(() -> {
for (int i = 0; i < iterations; i++) { IntStream.range(0, iterations)
instances.put(i, BaseTest.createInstance()); .parallel()
} .forEach((i) -> instances.put(i, BaseTest.createInstance()));
});
long watch = System.currentTimeMillis(); long watch = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) { pool.awaitQuiescence(5, TimeUnit.MINUTES);
final int n = i;
executor.execute(new Runnable() { pool.submit(() -> {
@Override IntStream.range(0, iterations)
public void run() { .parallel()
RedissonClient redisson = instances.get(n); .forEach((i) -> runnable.run(instances.get(i)));
runnable.run(redisson);
}
}); });
}
executor.shutdown(); pool.shutdown();
Assert.assertTrue(executor.awaitTermination(5, TimeUnit.MINUTES)); Assert.assertTrue(pool.awaitTermination(5, TimeUnit.MINUTES));
System.out.println("multi: " + (System.currentTimeMillis() - watch)); System.out.println("multi: " + (System.currentTimeMillis() - watch));
executor = Executors.newCachedThreadPool(); pool = new ForkJoinPool();
for (final RedissonClient redisson : instances.values()) { pool.submit(() -> {
executor.execute(new Runnable() { instances.values()
@Override .parallelStream()
public void run() { .<RedisClient>forEach((r) -> r.shutdown());
redisson.shutdown();
}
}); });
}
executor.shutdown(); pool.shutdown();
Assert.assertTrue(executor.awaitTermination(5, TimeUnit.MINUTES)); Assert.assertTrue(pool.awaitTermination(5, TimeUnit.MINUTES));
} }
protected void testSingleInstanceConcurrency(int iterations, final RedissonRunnable runnable) throws InterruptedException { protected void testSingleInstanceConcurrency(int iterations, final RedissonRunnable runnable) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2); final RedissonClient r = BaseTest.createInstance();
final RedissonClient redisson = BaseTest.createInstance();
long watch = System.currentTimeMillis(); long watch = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
executor.execute(new Runnable() { ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);
@Override pool.submit(() -> {
public void run() { IntStream.range(0, iterations)
runnable.run(redisson); .parallel()
} .forEach((i) -> runnable.run(r));
}); });
}
executor.shutdown(); pool.shutdown();
Assert.assertTrue(executor.awaitTermination(5, TimeUnit.MINUTES)); Assert.assertTrue(pool.awaitTermination(5, TimeUnit.MINUTES));
System.out.println(System.currentTimeMillis() - watch); System.out.println(System.currentTimeMillis() - watch);
redisson.shutdown(); r.shutdown();
} }
} }

@ -45,7 +45,8 @@ public abstract class BaseTest {
} }
@Before @Before
public void before() { public void before() throws InterruptedException {
Thread.sleep(5000l);
redisson.getKeys().flushall(); redisson.getKeys().flushall();
} }
} }

Loading…
Cancel
Save