From 11e7cb8bca225d50e4cc5135a83eb10b2b4c3d67 Mon Sep 17 00:00:00 2001 From: godotg Date: Fri, 24 Feb 2023 23:11:54 +0800 Subject: [PATCH] perf[time]: volatile reduces the cache hit ratio of the CPU --- .../main/java/com/zfoo/scheduler/manager/SchedulerBus.java | 2 -- .../src/main/java/com/zfoo/scheduler/util/TimeUtils.java | 7 ++++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/scheduler/src/main/java/com/zfoo/scheduler/manager/SchedulerBus.java b/scheduler/src/main/java/com/zfoo/scheduler/manager/SchedulerBus.java index d027d8e6..93aec1cc 100644 --- a/scheduler/src/main/java/com/zfoo/scheduler/manager/SchedulerBus.java +++ b/scheduler/src/main/java/com/zfoo/scheduler/manager/SchedulerBus.java @@ -68,8 +68,6 @@ public abstract class SchedulerBus { logger.error("scheduler triggers an error.", e); } }, 0, TimeUtils.MILLIS_PER_SECOND, TimeUnit.MILLISECONDS); - - executor.scheduleAtFixedRate(TimeUtils::currentTimeMillis, 0, 20, TimeUnit.MILLISECONDS); } public static class SchedulerThreadFactory implements ThreadFactory { diff --git a/scheduler/src/main/java/com/zfoo/scheduler/util/TimeUtils.java b/scheduler/src/main/java/com/zfoo/scheduler/util/TimeUtils.java index 4c4a4298..4192c173 100644 --- a/scheduler/src/main/java/com/zfoo/scheduler/util/TimeUtils.java +++ b/scheduler/src/main/java/com/zfoo/scheduler/util/TimeUtils.java @@ -83,7 +83,8 @@ public abstract class TimeUtils { SchedulerBus.refreshMinTriggerTimestamp(); } - private static volatile long timestamp = System.currentTimeMillis(); + // volatile reduces the cache hit ratio of the CPU + private static long timestamp = System.currentTimeMillis(); /** * 获取精确的时间戳 @@ -94,9 +95,9 @@ public abstract class TimeUtils { } /** - * 获取最多只有20ms延迟的粗略时间戳,适用于对时间精度要求不高的场景,最多只有20ms误差 + * CN:获取最多只有一秒延迟的粗略时间戳,适用于对时间精度要求不高的场景,比System.currentTimeMillis()的性能高10倍 *

- * 比System.currentTimeMillis()的性能高10倍 + * EN:Obtain a coarse timestamp with a delay of up to one second, which is suitable for scenarios that do not require high time accuracy */ public static long now() { return timestamp;