From 1c20b6236a6445e41b4132b1d627cf298fd27dcf Mon Sep 17 00:00:00 2001 From: godotg Date: Sat, 8 Oct 2022 11:08:07 +0800 Subject: [PATCH] perf[executor]: use CopyOnWriteHashMapLongObject to improve performance of visiting threadMap --- event/src/main/java/com/zfoo/event/manager/EventBus.java | 5 +++-- net/src/main/java/com/zfoo/net/task/TaskBus.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/event/src/main/java/com/zfoo/event/manager/EventBus.java b/event/src/main/java/com/zfoo/event/manager/EventBus.java index dcb79d38..940c57ed 100644 --- a/event/src/main/java/com/zfoo/event/manager/EventBus.java +++ b/event/src/main/java/com/zfoo/event/manager/EventBus.java @@ -16,6 +16,7 @@ package com.zfoo.event.manager; import com.zfoo.event.model.event.IEvent; import com.zfoo.event.model.vo.IEventReceiver; import com.zfoo.protocol.collection.CollectionUtils; +import com.zfoo.protocol.collection.concurrent.CopyOnWriteHashMapLongObject; import com.zfoo.protocol.util.AssertionUtils; import com.zfoo.protocol.util.StringUtils; import com.zfoo.util.SafeRunnable; @@ -47,7 +48,7 @@ public abstract class EventBus { private static final ExecutorService[] executors = new ExecutorService[EXECUTORS_SIZE]; - private static final Map threadMap = new ConcurrentHashMap<>(); + private static final CopyOnWriteHashMapLongObject threadMap = new CopyOnWriteHashMapLongObject<>(); private static final Map, List> receiverMap = new HashMap<>(); @@ -151,7 +152,7 @@ public abstract class EventBus { } public static Executor threadExecutor(long currentThreadId) { - return threadMap.get(currentThreadId); + return threadMap.getPrimitive(currentThreadId); } } diff --git a/net/src/main/java/com/zfoo/net/task/TaskBus.java b/net/src/main/java/com/zfoo/net/task/TaskBus.java index 99301a5e..4fa258c8 100644 --- a/net/src/main/java/com/zfoo/net/task/TaskBus.java +++ b/net/src/main/java/com/zfoo/net/task/TaskBus.java @@ -18,6 +18,7 @@ import com.zfoo.net.NetContext; import com.zfoo.net.task.dispatcher.AbstractTaskDispatch; import com.zfoo.net.task.dispatcher.ITaskDispatch; import com.zfoo.net.task.model.PacketReceiverTask; +import com.zfoo.protocol.collection.concurrent.CopyOnWriteHashMapLongObject; import com.zfoo.protocol.util.AssertionUtils; import com.zfoo.protocol.util.StringUtils; import com.zfoo.scheduler.manager.SchedulerBus; @@ -53,7 +54,7 @@ public final class TaskBus { */ private static final ExecutorService[] executors; - private static final Map threadMap = new ConcurrentHashMap<>(); + private static final CopyOnWriteHashMapLongObject threadMap = new CopyOnWriteHashMapLongObject<>(); static { var localConfig = NetContext.getConfigManager().getLocalConfig(); @@ -131,7 +132,7 @@ public final class TaskBus { // 在task,event,scheduler线程执行的异步请求,请求成功过后依然在相同的线程执行回调任务 public static Executor currentThreadExecutor() { var threadId = Thread.currentThread().getId(); - var taskExecutor = threadMap.get(threadId); + var taskExecutor = threadMap.getPrimitive(threadId); if (taskExecutor != null) { return taskExecutor; }