From 98854ea38e29d925cf4b906da159d65363555e88 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 10 Sep 2023 17:19:57 +0800 Subject: [PATCH] test[protocol]: map test --- .../collection/ConcurrentTesting.java | 235 +++++++++--------- 1 file changed, 122 insertions(+), 113 deletions(-) diff --git a/protocol/src/test/java/com/zfoo/protocol/collection/ConcurrentTesting.java b/protocol/src/test/java/com/zfoo/protocol/collection/ConcurrentTesting.java index 47b87903..32574919 100644 --- a/protocol/src/test/java/com/zfoo/protocol/collection/ConcurrentTesting.java +++ b/protocol/src/test/java/com/zfoo/protocol/collection/ConcurrentTesting.java @@ -66,147 +66,156 @@ public class ConcurrentTesting { Assert.assertTrue(map.isEmpty()); } + public static final int num = 100_0000; + public static final int maxCount = 10; + @Test public void concurrentPrimitiveTest() throws InterruptedException { - var map = new ConcurrentHashMapLongObject(); - var num = 1_000_0000; + var map = new ConcurrentHashMapLongObject(128); var startTime = System.currentTimeMillis(); - var countDownLatch = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.put(j, j); + for (int count = 0; count < maxCount; count++) { + var countDownLatch = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + map.put(j, j); + } + map.forEachPrimitive(it -> it.value()); + countDownLatch.countDown(); } - map.forEachPrimitive(it -> it.value()); - countDownLatch.countDown(); - } - }).start(); - } - countDownLatch.await(); - Assert.assertEquals(map.size(), num); + }).start(); + } + countDownLatch.await(); + Assert.assertEquals(map.size(), num); - var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.remove((long) j); + var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + var value = (int) map.get((long) j); + Assert.assertEquals(value, j); + } + map.forEachPrimitive(it -> it.value()); + countDownLatch2.countDown(); } - map.forEachPrimitive(it -> it.value()); - countDownLatch2.countDown(); - } - }).start(); - } - countDownLatch2.await(); - Assert.assertTrue(map.isEmpty()); + }).start(); + } + countDownLatch2.await(); - var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.put(j, j); + var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + map.put(j, j); + } + map.forEachPrimitive(it -> it.value()); + countDownLatch3.countDown(); } - map.forEachPrimitive(it -> it.value()); - countDownLatch3.countDown(); - } - }).start(); - } - countDownLatch3.await(); - Assert.assertEquals(map.size(), num); + }).start(); + } + countDownLatch3.await(); - var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.remove((long) j); + var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + map.remove((long) j); + } + map.forEachPrimitive(it -> it.value()); + countDownLatch4.countDown(); } - map.forEachPrimitive(it -> it.value()); - countDownLatch4.countDown(); - } - }).start(); + }).start(); + } + countDownLatch4.await(); + Assert.assertTrue(map.isEmpty()); } - countDownLatch4.await(); - Assert.assertTrue(map.isEmpty()); + System.out.println(System.currentTimeMillis() - startTime); } @Test public void concurrentTest() throws InterruptedException { var map = new ConcurrentHashMap(); - var num = 1_000_0000; var startTime = System.currentTimeMillis(); - var countDownLatch = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.put((long) j, j); + for (int count = 0; count < maxCount; count++) { + var countDownLatch = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + map.put((long) j, j); + } + map.forEach((key, value) -> { + }); + countDownLatch.countDown(); } - map.forEach((key, value) -> {}); - countDownLatch.countDown(); - } - }).start(); - } - countDownLatch.await(); - Assert.assertEquals(map.size(), num); + }).start(); + } + countDownLatch.await(); + Assert.assertEquals(map.size(), num); - var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.remove((long) j); + var countDownLatch2 = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + var value = (int) map.get((long) j); + Assert.assertEquals(value, j); + } + map.forEach((key, value) -> { + }); + countDownLatch2.countDown(); } - map.forEach((key, value) -> {}); - countDownLatch2.countDown(); - } - }).start(); - } - countDownLatch2.await(); - Assert.assertTrue(map.isEmpty()); + }).start(); + } + countDownLatch2.await(); - var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.put((long) j, j); + var countDownLatch3 = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + map.put((long) j, j); + } + map.forEach((key, value) -> { + }); + countDownLatch3.countDown(); } - map.forEach((key, value) -> {}); - countDownLatch3.countDown(); - } - }).start(); - } - countDownLatch3.await(); - Assert.assertEquals(map.size(), num); + }).start(); + } + countDownLatch3.await(); - var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE); - for (var i = 0; i < EXECUTOR_SIZE; i++) { - new Thread(new Runnable() { - @Override - public void run() { - for (int j = 0; j < num; j++) { - map.remove((long) j); + var countDownLatch4 = new CountDownLatch(EXECUTOR_SIZE); + for (var i = 0; i < EXECUTOR_SIZE; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int j = 0; j < num; j++) { + map.remove((long) j); + } + map.forEach((key, value) -> { + }); + countDownLatch4.countDown(); } - map.forEach((key, value) -> {}); - countDownLatch4.countDown(); - } - }).start(); + }).start(); + } + countDownLatch4.await(); + Assert.assertTrue(map.isEmpty()); } - countDownLatch4.await(); - Assert.assertTrue(map.isEmpty()); + System.out.println(System.currentTimeMillis() - startTime); } }