Re-add thread configurations for async lighting w/ Removed craps

This commit is contained in:
Sotr
2018-07-23 18:33:30 +08:00
parent f77f039dbb
commit 87583d4e7c
6 changed files with 22 additions and 14 deletions

View File

@@ -185,6 +185,16 @@ public class AkarinGlobalConfig {
keepAliveTimeout = getSeconds(getString("core.keep-alive-response-timeout", "30s")) * 1000; keepAliveTimeout = getSeconds(getString("core.keep-alive-response-timeout", "30s")) * 1000;
} }
public static int asyncLightingThreads;
private static void asyncLightingThreads() {
asyncLightingThreads = getInt("core.async-lighting.executor-threads", 2);
}
public static boolean asyncLightingWorkStealing;
private static void asyncLightingWorkStealing() {
asyncLightingWorkStealing = getBoolean("core.async-lighting.use-work-stealing", false);
}
public static boolean throwOnAsyncCaught; public static boolean throwOnAsyncCaught;
private static void throwOnAsyncCaught() { private static void throwOnAsyncCaught() {
throwOnAsyncCaught = getBoolean("core.thread-safe.async-catcher.throw-on-caught", true); throwOnAsyncCaught = getBoolean("core.thread-safe.async-catcher.throw-on-caught", true);

View File

@@ -18,10 +18,10 @@ public class AkarinSlackScheduler extends Thread {
return Singleton.instance; return Singleton.instance;
} }
public static void boot() { public void boot() {
Singleton.instance.setName("Akarin Slack Scheduler Thread"); setName("Akarin Slack Scheduler Thread");
Singleton.instance.setDaemon(true); setDaemon(true);
Singleton.instance.start(); start();
Akari.logger.info("Slack scheduler service started"); Akari.logger.info("Slack scheduler service started");
} }

View File

@@ -7,7 +7,6 @@ import org.spongepowered.asm.mixin.Shadow;
import io.akarin.api.internal.Akari; import io.akarin.api.internal.Akari;
import io.akarin.server.core.AkarinGlobalConfig; import io.akarin.server.core.AkarinGlobalConfig;
import net.minecraft.server.PersistentCollection;
@Mixin(value = AsyncCatcher.class, remap = false) @Mixin(value = AsyncCatcher.class, remap = false)
public abstract class MixinAsyncCatcher { public abstract class MixinAsyncCatcher {
@@ -23,7 +22,6 @@ public abstract class MixinAsyncCatcher {
} else { } else {
Akari.logger.warn("Asynchronous " + reason + "!"); Akari.logger.warn("Asynchronous " + reason + "!");
Thread.dumpStack(); Thread.dumpStack();
PersistentCollection.class.getName();
} }
} }
} }

View File

@@ -59,7 +59,7 @@ public abstract class MixinMinecraftServer {
WorldServer world = worlds.get(i); WorldServer world = worlds.get(i);
TileEntityHopper.skipHopperEvents = world.paperConfig.disableHopperMoveEvents || InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; TileEntityHopper.skipHopperEvents = world.paperConfig.disableHopperMoveEvents || InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0;
} }
AkarinSlackScheduler.boot(); AkarinSlackScheduler.get().boot();
} }
@Overwrite @Overwrite

View File

@@ -68,7 +68,7 @@ public abstract class MixinChunk implements IMixinChunk {
private CopyOnWriteArrayList<Short> queuedBlockLightingUpdates = new CopyOnWriteArrayList<>(); private CopyOnWriteArrayList<Short> queuedBlockLightingUpdates = new CopyOnWriteArrayList<>();
private AtomicInteger pendingLightUpdates = new AtomicInteger(); private AtomicInteger pendingLightUpdates = new AtomicInteger();
private long lightUpdateTime; private long lightUpdateTime;
private ExecutorService lightExecutorService; private static ExecutorService lightExecutorService;
@Shadow(aliases = "m") private boolean isGapLightingUpdated; @Shadow(aliases = "m") private boolean isGapLightingUpdated;
@Shadow(aliases = "r") private boolean ticked; @Shadow(aliases = "r") private boolean ticked;

View File

@@ -27,8 +27,6 @@ package io.akarin.server.mixin.lighting;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -37,6 +35,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.akarin.api.internal.Akari; import io.akarin.api.internal.Akari;
import io.akarin.api.internal.mixin.IMixinChunk; import io.akarin.api.internal.mixin.IMixinChunk;
import io.akarin.api.internal.mixin.IMixinWorldServer; import io.akarin.api.internal.mixin.IMixinWorldServer;
import io.akarin.server.core.AkarinGlobalConfig;
import net.minecraft.server.BlockPosition; import net.minecraft.server.BlockPosition;
import net.minecraft.server.Chunk; import net.minecraft.server.Chunk;
import net.minecraft.server.EnumDirection; import net.minecraft.server.EnumDirection;
@@ -55,11 +54,12 @@ public abstract class MixinWorldServer extends MixinWorld implements IMixinWorld
private static final short XZ_MASK = 0xF; private static final short XZ_MASK = 0xF;
private static final short Y_SHORT_MASK = 0xFF; private static final short Y_SHORT_MASK = 0xFF;
private final static ThreadFactory SERVICE_FACTORY = new ThreadFactoryBuilder().setNameFormat("Akarin Async Lighting Thread - %1$d").build();
private final ExecutorService lightExecutorService = getExecutorService(); private final ExecutorService lightExecutorService = getExecutorService();
private static ExecutorService getExecutorService() {
private ExecutorService getExecutorService() { return AkarinGlobalConfig.asyncLightingWorkStealing ?
return Executors.newFixedThreadPool(1, SERVICE_FACTORY); Executors.newFixedThreadPool(AkarinGlobalConfig.asyncLightingThreads, new ThreadFactoryBuilder().setNameFormat("Akarin Async Light Thread").build())
:
Executors.newWorkStealingPool(AkarinGlobalConfig.asyncLightingThreads);
} }
@Override @Override