diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java index 65c281c..780ce26 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -595,11 +595,11 @@ field_155771_h.info("Saving other data"); try { - GlobalExecutors.cachedExecutor().shutdown(); - if(!GlobalExecutors.cachedExecutor().awaitTermination(10000, TimeUnit.MILLISECONDS)) + GlobalExecutors.cachedIO().shutdown(); + if(!GlobalExecutors.cachedIO().awaitTermination(10000, TimeUnit.MILLISECONDS)) field_155771_h.info("Global cached executor did not terminated cleanly"); - GlobalExecutors.writingIOExecutor().shutdown(); - if(!GlobalExecutors.writingIOExecutor().awaitTermination(60000, TimeUnit.MILLISECONDS)) + GlobalExecutors.writingIO().shutdown(); + if(!GlobalExecutors.writingIO().awaitTermination(60000, TimeUnit.MILLISECONDS)) field_155771_h.info("Global writing IO executor did not terminated cleanly"); } catch(InterruptedException ignored){} diff --git a/src/main/java/net/minecraft/server/network/NetHandlerLoginServer.java b/src/main/java/net/minecraft/server/network/NetHandlerLoginServer.java index 3785a72..88b62dd 100644 --- a/src/main/java/net/minecraft/server/network/NetHandlerLoginServer.java +++ b/src/main/java/net/minecraft/server/network/NetHandlerLoginServer.java @@ -153,7 +153,7 @@ this.field_147335_k = p_147315_1_.func_149300_a(privatekey); this.field_147328_g = NetHandlerLoginServer.LoginState.AUTHENTICATING; this.field_147333_a.enableEncryption(this.field_147335_k); - GlobalExecutors.cachedExecutor().execute(new Runnable() + GlobalExecutors.cachedIO().execute(new Runnable() { private static final String __OBFID = "CL_00001459"; public void run() diff --git a/src/main/java/net/minecraft/world/storage/SaveHandler.java b/src/main/java/net/minecraft/world/storage/SaveHandler.java index 95ed034..571dbdf 100644 --- a/src/main/java/net/minecraft/world/storage/SaveHandler.java +++ b/src/main/java/net/minecraft/world/storage/SaveHandler.java @@ -169,7 +169,7 @@ FMLCommonHandler.instance().handleWorldDataSave(this, p_75755_1_, nbttagcompound2); - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() diff --git a/src/main/java/org/ultramine/sceduler/ScheduledAsyncTask.java b/src/main/java/org/ultramine/sceduler/ScheduledAsyncTask.java index 0bae8e5..6cd578d 100644 --- a/src/main/java/org/ultramine/sceduler/ScheduledAsyncTask.java +++ b/src/main/java/org/ultramine/sceduler/ScheduledAsyncTask.java @@ -13,6 +13,6 @@ @Override void launch() { - GlobalExecutors.cachedExecutor().execute(task); + GlobalExecutors.cachedIO().execute(task); } } diff --git a/src/main/java/org/ultramine/server/BackupManager.java b/src/main/java/org/ultramine/server/BackupManager.java index b0a2710..e93fd0e 100644 --- a/src/main/java/org/ultramine/server/BackupManager.java +++ b/src/main/java/org/ultramine/server/BackupManager.java @@ -157,7 +157,7 @@ world.theChunkProviderServer.preventSaving(); } - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -370,7 +370,7 @@ } }; - GlobalExecutors.cachedExecutor().execute(new Runnable() + GlobalExecutors.cachedIO().execute(new Runnable() { @Override public void run() diff --git a/src/main/java/org/ultramine/server/data/JDBCDataProvider.java b/src/main/java/org/ultramine/server/data/JDBCDataProvider.java index d2775d2..0db0be4 100644 --- a/src/main/java/org/ultramine/server/data/JDBCDataProvider.java +++ b/src/main/java/org/ultramine/server/data/JDBCDataProvider.java @@ -200,7 +200,7 @@ @Override public void savePlayer(final int dim, final GameProfile player, final NBTTagCompound nbt) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -309,7 +309,7 @@ final GameProfile player = data.getProfile(); - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -382,7 +382,7 @@ @Override public void saveWarp(final String name, final WarpLocation warp) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -423,7 +423,7 @@ @Override public void removeWarp(final String name) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -480,7 +480,7 @@ @Override public void saveFastWarp(final String name) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -509,7 +509,7 @@ @Override public void removeFastWarp(final String name) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() diff --git a/src/main/java/org/ultramine/server/util/AsyncIOUtils.java b/src/main/java/org/ultramine/server/util/AsyncIOUtils.java index a70710a..e6c8ee9 100644 --- a/src/main/java/org/ultramine/server/util/AsyncIOUtils.java +++ b/src/main/java/org/ultramine/server/util/AsyncIOUtils.java @@ -18,7 +18,7 @@ public static void writeString(final File file, final String data) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -37,7 +37,7 @@ public static void writeBytes(final File file, final byte[] data) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() @@ -56,7 +56,7 @@ public static void safeWriteNBT(final File file, final NBTTagCompound nbt) { - GlobalExecutors.writingIOExecutor().execute(new Runnable() + GlobalExecutors.writingIO().execute(new Runnable() { @Override public void run() diff --git a/src/main/java/org/ultramine/server/util/GlobalExecutors.java b/src/main/java/org/ultramine/server/util/GlobalExecutors.java index 637c0e6..993b38d 100644 --- a/src/main/java/org/ultramine/server/util/GlobalExecutors.java +++ b/src/main/java/org/ultramine/server/util/GlobalExecutors.java @@ -3,13 +3,20 @@ import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import com.google.common.util.concurrent.ThreadFactoryBuilder; public class GlobalExecutors { - private static final ExecutorService io = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("UM IO #%d").setDaemon(true).build()); - private static final ExecutorService cached = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setNameFormat("UM cached #%d").setDaemon(true).build()); + private static final ExecutorService writing = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("UM IO writing #%d").setDaemon(true).build()); + private static final ExecutorService cached = new ThreadPoolExecutor( + 2, Integer.MAX_VALUE, + 60L, TimeUnit.SECONDS, + new SynchronousQueue(), + new ThreadFactoryBuilder().setNameFormat("UM IO cached #%d").setDaemon(true).build()); private static final Executor sync = new SyncServerExecutor(); /** @@ -17,9 +24,15 @@ * единственный поток, т.к. при сохранениее не требуется наискорейшее * выполнение задачи. */ + public static ExecutorService writingIO() + { + return writing; + } + + @Deprecated public static ExecutorService writingIOExecutor() { - return io; + return writing; } /** @@ -27,6 +40,12 @@ * количество потоков по мере необходимости. При остановке сервер не ожидает * окончания выполнения задач */ + public static ExecutorService cachedIO() + { + return cached; + } + + @Deprecated public static ExecutorService cachedExecutor() { return cached; diff --git a/src/main/java/org/ultramine/server/world/WorldDescriptor.java b/src/main/java/org/ultramine/server/world/WorldDescriptor.java index 3b5e1b8..c3ae954 100644 --- a/src/main/java/org/ultramine/server/world/WorldDescriptor.java +++ b/src/main/java/org/ultramine/server/world/WorldDescriptor.java @@ -437,7 +437,7 @@ } else { - return CompletableFuture.runAsync(() -> worldLoader.doAsyncLoadPhase(), GlobalExecutors.cachedExecutor()).thenRunAsync(() -> { + return CompletableFuture.runAsync(() -> worldLoader.doAsyncLoadPhase(), GlobalExecutors.cachedIO()).thenRunAsync(() -> { WorldServer world = worldLoader.doLoad(); setWorld(world); @@ -487,7 +487,7 @@ if(getState().isLoaded()) destroyWorld(save); setState(targetState); - }).thenRunAsync(() -> dispose(), GlobalExecutors.cachedExecutor()); + }).thenRunAsync(() -> dispose(), GlobalExecutors.cachedIO()); } @SideOnly(Side.SERVER) @@ -514,9 +514,9 @@ private CompletableFuture deleteLater0() { if(state.isLoaded()) - return downgradeLater(false, WorldState.HELD).thenRunAsync(() -> clearWorldDir(), GlobalExecutors.cachedExecutor()); + return downgradeLater(false, WorldState.HELD).thenRunAsync(() -> clearWorldDir(), GlobalExecutors.cachedIO()); else - return CompletableFuture.runAsync(() -> clearWorldDir(), GlobalExecutors.cachedExecutor()); + return CompletableFuture.runAsync(() -> clearWorldDir(), GlobalExecutors.cachedIO()); } @SideOnly(Side.SERVER)