Cleanup + created SingleThreadProvider

This commit is contained in:
themode 2020-11-13 19:43:22 +01:00
parent 451402ed4f
commit ade727cd0f
4 changed files with 61 additions and 4 deletions

View File

@ -85,9 +85,6 @@ public final class MinecraftServer {
public static final String THREAD_NAME_TICK = "Ms-Tick";
public static final String THREAD_NAME_PACKET_WRITER = "Ms-PacketWriterPool";
public static final int THREAD_COUNT_PACKET_WRITER = 2;
public static final String THREAD_NAME_BLOCK_BATCH = "Ms-BlockBatchPool";
public static final int THREAD_COUNT_BLOCK_BATCH = 2;

View File

@ -38,7 +38,6 @@ public final class BenchmarkManager {
THREAD_MX_BEAN.setThreadCpuTimeEnabled(true);
THREADS.add(THREAD_NAME_MAIN_UPDATE);
THREADS.add(THREAD_NAME_PACKET_WRITER);
THREADS.add(THREAD_NAME_BLOCK_BATCH);
THREADS.add(THREAD_NAME_SCHEDULER);
THREADS.add(THREAD_NAME_TICK);

View File

@ -0,0 +1,58 @@
package net.minestom.server.thread;
import net.minestom.server.instance.Chunk;
import net.minestom.server.instance.Instance;
import net.minestom.server.utils.chunk.ChunkUtils;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.Future;
/**
* Simple thread provider implementation using a single thread to update all the instances and chunks.
*/
public class SingleThreadProvider extends ThreadProvider {
{
setThreadCount(1);
}
private final Set<Instance> instances = new CopyOnWriteArraySet<>();
@Override
public void onInstanceCreate(@NotNull Instance instance) {
this.instances.add(instance);
}
@Override
public void onInstanceDelete(@NotNull Instance instance) {
this.instances.remove(instance);
}
@Override
public void onChunkLoad(@NotNull Instance instance, int chunkX, int chunkZ) {
}
@Override
public void onChunkUnload(@NotNull Instance instance, int chunkX, int chunkZ) {
}
@NotNull
@Override
public List<Future<?>> update(long time) {
return Collections.singletonList(pool.submit(() -> {
for (Instance instance : instances) {
updateInstance(instance, time);
for (Chunk chunk : instance.getChunks()) {
final long index = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
processChunkTick(instance, index, time);
}
}
}));
}
}

View File

@ -103,6 +103,9 @@ public abstract class ThreadProvider {
}
private void refreshPool() {
if (pool != null) {
this.pool.shutdown();
}
this.pool = new MinestomThread(threadCount, MinecraftServer.THREAD_NAME_TICK);
}