Customable players per io thread

This commit is contained in:
Sotr
2018-06-05 19:10:38 +08:00
parent f8dd1360b9
commit 81cb233c34
4 changed files with 32 additions and 0 deletions

View File

@@ -157,4 +157,9 @@ public class AkarinGlobalConfig {
private static void registryTerminationSeconds() {
registryTerminationSeconds = getSeconds(getString("bootstrap.parallel-registry-termination", "9s"));
}
public static int playersPerIOThread;
private static void playersPerIOThread() {
playersPerIOThread = getInt("chunk.players-per-chunk-io-thread", 50);
}
}

View File

@@ -0,0 +1,25 @@
package io.akarin.server.mixin.core;
import org.bukkit.craftbukkit.chunkio.ChunkIOExecutor;
import org.bukkit.craftbukkit.util.AsynchronousExecutor;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import io.akarin.server.core.AkarinGlobalConfig;
import net.minecraft.server.Chunk;
@Mixin(value = ChunkIOExecutor.class, remap = false)
public class MixinChunkIOExecutor {
@Shadow @Final static int BASE_THREADS;
@Shadow @Mutable @Final static int PLAYERS_PER_THREAD;
@Shadow @Final private static AsynchronousExecutor<?, Chunk, Runnable, RuntimeException> instance;
@Overwrite
public static void adjustPoolSize(int players) {
int size = Math.max(BASE_THREADS, (int) Math.ceil(players / (PLAYERS_PER_THREAD = AkarinGlobalConfig.playersPerIOThread)));
instance.setActiveThreads(size);
}
}

View File

@@ -4,6 +4,7 @@ import java.util.function.Supplier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import net.minecraft.server.MCUtil;
@Mixin(value = MCUtil.class, remap = false)

View File

@@ -19,6 +19,7 @@
"MixinTimingHandler",
"MixinVersionCommand",
"MixinMinecraftServer",
"MixinChunkIOExecutor",
"MixinTileEntityEnchantTable"
]
}