mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-22 16:39:22 +00:00
Updated Upstream (Gale/Purpur/Leaves)
This commit is contained in:
93
patches/server/0067-Virtual-Thread-for-async-scheduler.patch
Normal file
93
patches/server/0067-Virtual-Thread-for-async-scheduler.patch
Normal file
@@ -0,0 +1,93 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: nostalfinals <yuu8583@proton.me>
|
||||
Date: Tue, 12 Mar 2024 00:36:29 +0800
|
||||
Subject: [PATCH] Virtual Thread for async scheduler
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index ce3572f8044d7a4732d9411a622be79c48da1346..dbdb4276c3689d477be6a06f3a826ec0382d1408 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -387,7 +387,6 @@ public class Main {
|
||||
tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$1");
|
||||
tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$2");
|
||||
tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$3");
|
||||
- tryPreloadClass("org.bukkit.craftbukkit.scheduler.CraftScheduler$4");
|
||||
tryPreloadClass("org.slf4j.helpers.MessageFormatter");
|
||||
tryPreloadClass("org.slf4j.helpers.FormattingTuple");
|
||||
tryPreloadClass("org.slf4j.helpers.BasicMarker");
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java
|
||||
index 3c1992e212a6d6f1db4d5b807b38d71913619fc0..fe4f1868a5baebceb9ad0520f059ac8c4a68d397 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java
|
||||
@@ -38,17 +38,30 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CraftAsyncScheduler extends CraftScheduler {
|
||||
|
||||
- private final ThreadPoolExecutor executor = new ThreadPoolExecutor(
|
||||
- 4, Integer.MAX_VALUE,30L, TimeUnit.SECONDS, new SynchronousQueue<>(),
|
||||
- new ThreadFactoryBuilder().setNameFormat("Craft Scheduler Thread - %1$d").build());
|
||||
+ private final org.apache.logging.log4j.Logger LOGGER = org.apache.logging.log4j.LogManager.getLogger(getClass().getName()); // Leaf - Class logger
|
||||
+ private final Executor executor; // Leaf - use super class
|
||||
private final Executor management = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder()
|
||||
.setNameFormat("Craft Async Scheduler Management Thread").build());
|
||||
private final List<CraftTask> temp = new ArrayList<>();
|
||||
|
||||
CraftAsyncScheduler() {
|
||||
super(true);
|
||||
- executor.allowCoreThreadTimeOut(true);
|
||||
- executor.prestartAllCoreThreads();
|
||||
+
|
||||
+ // Leaf start - Ability to use Virtual Thread for async scheduler
|
||||
+ if (org.dreeam.leaf.config.modules.opt.VT4BukkitScheduler.enabled) {
|
||||
+ executor = Executors.newThreadPerTaskExecutor(Thread.ofVirtual().name("Craft Scheduler Thread - ", 0).factory());
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ executor = new ThreadPoolExecutor(
|
||||
+ 4, Integer.MAX_VALUE, 30L, TimeUnit.SECONDS, new SynchronousQueue<>(),
|
||||
+ new ThreadFactoryBuilder().setNameFormat("Craft Scheduler Thread - %1$d").setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER)).build());
|
||||
+
|
||||
+ var threadPoolExecutor = (ThreadPoolExecutor) executor;
|
||||
+
|
||||
+ threadPoolExecutor.allowCoreThreadTimeOut(true);
|
||||
+ threadPoolExecutor.prestartAllCoreThreads();
|
||||
+ // Leaf end - Ability to use Virtual Thread for async scheduler
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/dreeam/leaf/config/modules/opt/VT4BukkitScheduler.java b/src/main/java/org/dreeam/leaf/config/modules/opt/VT4BukkitScheduler.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0c6b4555c615bd918fc8c0a597b31b7f9f05f629
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/dreeam/leaf/config/modules/opt/VT4BukkitScheduler.java
|
||||
@@ -0,0 +1,29 @@
|
||||
+package org.dreeam.leaf.config.modules.opt;
|
||||
+
|
||||
+import com.electronwill.nightconfig.core.file.CommentedFileConfig;
|
||||
+import org.dreeam.leaf.config.ConfigInfo;
|
||||
+import org.dreeam.leaf.config.EnumConfigCategory;
|
||||
+import org.dreeam.leaf.config.IConfigModule;
|
||||
+
|
||||
+public class VT4BukkitScheduler implements IConfigModule {
|
||||
+
|
||||
+ @Override
|
||||
+ public EnumConfigCategory getCategory() {
|
||||
+ return EnumConfigCategory.PERFORMANCE;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public String getBaseName() {
|
||||
+ return "use_virtual_thread_for_async_scheduler";
|
||||
+ }
|
||||
+
|
||||
+ @ConfigInfo(baseName = "enabled")
|
||||
+ public static boolean enabled = true;
|
||||
+
|
||||
+ @Override
|
||||
+ public void onLoaded(CommentedFileConfig config) {
|
||||
+ config.setComment("performance.use_virtual_thread_for_async_scheduler", """
|
||||
+ Use the new Virtual Thread introduced in JDK 21 for CraftAsyncScheduler.
|
||||
+ """);
|
||||
+ }
|
||||
+}
|
||||
Reference in New Issue
Block a user