From eaec50ea1d4f9239c99406c48e636c902001e619 Mon Sep 17 00:00:00 2001 From: godotg Date: Thu, 29 Sep 2022 16:39:19 +0800 Subject: [PATCH] =?UTF-8?q?perf[net]:=20=E4=BD=BF=E7=94=A8=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E6=9B=B4=E9=AB=98=E7=9A=84lazySet()=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E6=88=91=E4=BB=AC=E6=83=B3=E5=AF=B9=E4=B8=80=E4=B8=AA=E5=8E=9F?= =?UTF-8?q?=E5=AD=90=E5=8F=98=E9=87=8F=E8=BF=9B=E8=A1=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E8=80=8C=E4=B8=94=E6=88=91=E4=BB=AC=E7=9F=A5=E9=81=93?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E4=BF=AE=E6=94=B9=E4=B8=8D=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E5=AF=B9=E5=85=B6=E4=BB=96=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- net/src/main/java/com/zfoo/net/router/route/SignalBridge.java | 4 +++- net/src/test/java/com/zfoo/net/router/SignalBridgeTest.java | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java b/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java index 4e4e41db..f03d3341 100644 --- a/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java +++ b/net/src/main/java/com/zfoo/net/router/route/SignalBridge.java @@ -64,7 +64,9 @@ public class SignalBridge { var hash = signalId & SIGNAL_MASK; var attachment = signalAttachmentArray.get(hash); - if (attachment != null && attachment.getSignalId() == signalId && signalAttachmentArray.compareAndSet(hash, attachment, null)) { + if (attachment != null && attachment.getSignalId() == signalId) { + // 使用性能更高的lazySet(),当我们想对一个原子变量进行修改,而且我们知道这个修改不需要立即对其他线程可见。 + signalAttachmentArray.lazySet(hash, null); return attachment; } return signalAttachmentMap.remove(signalId); diff --git a/net/src/test/java/com/zfoo/net/router/SignalBridgeTest.java b/net/src/test/java/com/zfoo/net/router/SignalBridgeTest.java index 225291dd..b2b6530d 100644 --- a/net/src/test/java/com/zfoo/net/router/SignalBridgeTest.java +++ b/net/src/test/java/com/zfoo/net/router/SignalBridgeTest.java @@ -16,6 +16,7 @@ import com.zfoo.event.manager.EventBus; import com.zfoo.net.router.route.SignalBridge; import com.zfoo.scheduler.util.TimeUtils; import com.zfoo.util.ThreadUtils; +import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; @@ -46,6 +47,7 @@ public class SignalBridgeTest { arrayTest(); mapTest(); + Assert.assertEquals(executorSize * count * totalIndex * 4, atomicInteger.get()); System.out.println(atomicInteger.get()); }