From 36f895d279622118c9b2ea6ab9a3de86fc53db0b Mon Sep 17 00:00:00 2001 From: godotg Date: Tue, 23 Aug 2022 16:47:06 +0800 Subject: [PATCH] =?UTF-8?q?perf[net]:=20=E6=8A=8A=E4=BC=98=E9=9B=85?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=BA=BF=E7=A8=8B=E6=B1=A0=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=89=93=E5=8D=B0=E7=9A=84=E6=9B=B4=E5=8A=A0=E8=AF=A6?= =?UTF-8?q?=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zfoo/net/core/AbstractClient.java | 3 ++- .../com/zfoo/net/core/AbstractServer.java | 8 +++---- .../main/java/com/zfoo/util/ThreadUtils.java | 23 ++++++++++++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/core/AbstractClient.java b/net/src/main/java/com/zfoo/net/core/AbstractClient.java index 7bc85096..fabbc4fb 100644 --- a/net/src/main/java/com/zfoo/net/core/AbstractClient.java +++ b/net/src/main/java/com/zfoo/net/core/AbstractClient.java @@ -18,6 +18,7 @@ import com.zfoo.net.handler.BaseRouteHandler; import com.zfoo.net.session.model.Session; import com.zfoo.protocol.exception.ExceptionUtils; import com.zfoo.protocol.util.IOUtils; +import com.zfoo.util.ThreadUtils; import com.zfoo.util.net.HostAndPort; import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; @@ -87,7 +88,7 @@ public abstract class AbstractClient implements IClient { public synchronized static void shutdown() { - AbstractServer.shutdownEventLoopGracefully(nioEventLoopGroup); + ThreadUtils.shutdownEventLoopGracefully("netty-client", nioEventLoopGroup); } } diff --git a/net/src/main/java/com/zfoo/net/core/AbstractServer.java b/net/src/main/java/com/zfoo/net/core/AbstractServer.java index 37cc586d..48715120 100644 --- a/net/src/main/java/com/zfoo/net/core/AbstractServer.java +++ b/net/src/main/java/com/zfoo/net/core/AbstractServer.java @@ -14,6 +14,7 @@ package com.zfoo.net.core; import com.zfoo.protocol.util.IOUtils; +import com.zfoo.util.ThreadUtils; import com.zfoo.util.net.HostAndPort; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; @@ -103,9 +104,8 @@ public abstract class AbstractServer implements IServer { @Override public synchronized void shutdown() { - shutdownEventLoopGracefully(bossGroup); - - shutdownEventLoopGracefully(workerGroup); + ThreadUtils.shutdownEventLoopGracefully("netty-boss", bossGroup); + ThreadUtils.shutdownEventLoopGracefully("netty-worker", workerGroup); if (channelFuture != null) { try { @@ -136,7 +136,7 @@ public abstract class AbstractServer implements IServer { logger.error("EventLoop Thread pool [{}] is failed to shutdown! ", executor, e); return; } - logger.info("EventLoop Thread pool [{}] shuts down gracefully.", executor); + logger.info("EventLoop Thread pool [{}] shutdown gracefully.", executor); } public synchronized static void shutdownAllServers() { diff --git a/util/src/main/java/com/zfoo/util/ThreadUtils.java b/util/src/main/java/com/zfoo/util/ThreadUtils.java index c9fdd65f..af6c78ba 100644 --- a/util/src/main/java/com/zfoo/util/ThreadUtils.java +++ b/util/src/main/java/com/zfoo/util/ThreadUtils.java @@ -13,6 +13,10 @@ package com.zfoo.util; +import io.netty.util.concurrent.EventExecutorGroup; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.concurrent.ExecutorService; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.TimeUnit; @@ -23,6 +27,8 @@ import java.util.concurrent.TimeUnit; */ public abstract class ThreadUtils { + private static final Logger logger = LoggerFactory.getLogger(ThreadUtils.class); + private static final int WAIT_TIME = 10; private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS; @@ -46,10 +52,25 @@ public abstract class ThreadUtils { } } catch (Exception e) { - throw new RuntimeException(e); + logger.error("[{}] is failed to shutdown! ", executor, e); } } + public synchronized static void shutdownEventLoopGracefully(String executorGroupName, EventExecutorGroup executor) { + if (executor == null) { + return; + } + try { + if (!executor.isTerminated()) { + executor.shutdownGracefully(); + } + } catch (Exception e) { + logger.error("[{}] is failed to shutdown! ", executorGroupName, e); + return; + } + logger.info("[{}] shutdown gracefully.", executorGroupName); + } + public static void shutdownForkJoinPool() { try { ForkJoinPool.commonPool().shutdown();