-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ability to use Virtual Thread for async scheduler (#30)
- Loading branch information
1 parent
eb9793a
commit f5ac6fc
Showing
4 changed files
with
113 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
patches/server/0073-Ability-to-use-Virtual-Thread-for-async-scheduler.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: nostalfinals <[email protected]> | ||
Date: Tue, 12 Mar 2024 00:36:29 +0800 | ||
Subject: [PATCH] Ability to use Virtual Thread for async scheduler | ||
|
||
|
||
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java | ||
index 9c1aff17aabd062640e3f451a2ef8c50a7c62f10..234a92d643059e7178eeb0b4dc255bccef656851 100644 | ||
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java | ||
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java | ||
@@ -26,6 +26,7 @@ package org.bukkit.craftbukkit.scheduler; | ||
import com.destroystokyo.paper.ServerSchedulerReportingWrapper; | ||
import com.google.common.util.concurrent.ThreadFactoryBuilder; | ||
import org.bukkit.plugin.Plugin; | ||
+import org.dreeam.leaf.config.modules.opt.VT4BukkitScheduler; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Iterator; | ||
@@ -38,17 +39,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").setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER)).build()); // Paper | ||
+ private final Executor executor; // Leaf - use super class | ||
private final Executor management = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() | ||
.setNameFormat("Craft Async Scheduler Management Thread").setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(net.minecraft.server.MinecraftServer.LOGGER)).build()); // Paper | ||
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 (!VT4BukkitScheduler.enabled) { | ||
+ 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(); | ||
+ | ||
+ return; | ||
+ } | ||
+ | ||
+ executor = Executors.newThreadPerTaskExecutor(Thread.ofVirtual().name("Craft Scheduler Thread - %1$d").factory()); | ||
+ // Leaf end | ||
} | ||
|
||
@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..9add2256eea4de354f7e4ada10b4d0ccb32a60a1 | ||
--- /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 = false; | ||
+ | ||
+ @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. | ||
+ """); | ||
+ } | ||
+} |
19 changes: 19 additions & 0 deletions
19
patches/server/0074-Use-a-shadow-fork-that-supports-Java-21.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: nostalfinals <[email protected]> | ||
Date: Tue, 12 Mar 2024 01:10:54 +0800 | ||
Subject: [PATCH] Use a shadow fork that supports Java 21 | ||
|
||
|
||
diff --git a/build.gradle.kts b/build.gradle.kts | ||
index 9d7cc530187263c6a4ed99df2c79d66d76749cc6..6497e2ce6720afb583dbfac5be2b7a14f8f2b632 100644 | ||
--- a/build.gradle.kts | ||
+++ b/build.gradle.kts | ||
@@ -3,7 +3,7 @@ import io.papermc.paperweight.util.* | ||
plugins { | ||
java | ||
`maven-publish` | ||
- id("com.github.johnrengelman.shadow") | ||
+ id("io.github.goooler.shadow") // Leaf - use a shadow fork that supports Java 21 | ||
} | ||
|
||
val log4jPlugins = sourceSets.create("log4jPlugins") |