From ea911f130bdde294c2b73b4a72a59b2d99117a0b Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Sun, 8 Aug 2021 11:25:37 +0800 Subject: [PATCH] =?UTF-8?q?perf[net]:=20=E4=BC=98=E5=8C=96=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=88=96=E5=BC=82=E6=AD=A5=E7=9A=84=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/dispatcher/manager/PacketSignal.java | 8 ++-- .../zfoo/net/dispatcher/PacketSignalTest.java | 40 +++++++------------ 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/dispatcher/manager/PacketSignal.java b/net/src/main/java/com/zfoo/net/dispatcher/manager/PacketSignal.java index d1e840e5..e6917449 100644 --- a/net/src/main/java/com/zfoo/net/dispatcher/manager/PacketSignal.java +++ b/net/src/main/java/com/zfoo/net/dispatcher/manager/PacketSignal.java @@ -51,12 +51,14 @@ public class PacketSignal { } public static SignalPacketAttachment removeSignalAttachment(SignalPacketAttachment packetAttachment) { - var packetId = packetAttachment.getPacketId(); + return removeSignalAttachment(packetAttachment.getPacketId()); + } + + public static SignalPacketAttachment removeSignalAttachment(int packetId) { var hash = packetId & SIGNAL_MASK; var attachment = signalPacketArray.get(hash); - if (attachment != null && attachment.getPacketId() == packetId) { - signalPacketArray.lazySet(hash, null); + if (attachment != null && attachment.getPacketId() == packetId && signalPacketArray.compareAndSet(hash, attachment, null)) { return attachment; } return signalPacketAttachmentMap.remove(packetId); diff --git a/net/src/test/java/com/zfoo/net/dispatcher/PacketSignalTest.java b/net/src/test/java/com/zfoo/net/dispatcher/PacketSignalTest.java index 90d84da3..cc1e7164 100644 --- a/net/src/test/java/com/zfoo/net/dispatcher/PacketSignalTest.java +++ b/net/src/test/java/com/zfoo/net/dispatcher/PacketSignalTest.java @@ -16,7 +16,6 @@ import com.zfoo.event.manager.EventBus; import com.zfoo.net.dispatcher.manager.PacketSignal; import com.zfoo.net.packet.model.SignalPacketAttachment; import com.zfoo.scheduler.util.TimeUtils; -import com.zfoo.util.ThreadUtils; import org.junit.Ignore; import org.junit.Test; @@ -50,15 +49,6 @@ public class PacketSignalTest { }); } - for (int i = 0; i < 100; i++) { - new Thread(new Runnable() { - @Override - public void run() { - addAndRemoveWithSleep(); - } - }).start(); - } - countDownLatch.await(); System.out.println(TimeUtils.currentTimeMillis() - startTime); @@ -66,24 +56,22 @@ public class PacketSignalTest { } public void addAndRemove() { - for (int i = 0; i < 1_0000_0000; i++) { - var id = atomicInteger.incrementAndGet(); - var attachment = new SignalPacketAttachment(); - attachment.setPacketId(id); - PacketSignal.addSignalAttachment(attachment); - PacketSignal.removeSignalAttachment(attachment); + for (int count = 0; count < 1_0000; count++) { + var startIndex = atomicInteger.incrementAndGet(); + var endIndex = 0; + for (int i = 0; i < 1000; i++) { + endIndex = atomicInteger.incrementAndGet(); + } + for (int i = startIndex; i < endIndex; i++) { + var attachment = new SignalPacketAttachment(); + attachment.setPacketId(i); + PacketSignal.addSignalAttachment(attachment); + } + for (int i = startIndex; i < endIndex; i++) { + PacketSignal.removeSignalAttachment(i); + } } } - public void addAndRemoveWithSleep() { - for (int i = 0; i < 1000_0000; i++) { - var id = atomicInteger.incrementAndGet(); - var attachment = new SignalPacketAttachment(); - attachment.setPacketId(id); - PacketSignal.addSignalAttachment(attachment); - ThreadUtils.sleep(3000); - PacketSignal.removeSignalAttachment(attachment); - } - } }