forked from Qortal/qortal
allowing user to set thread priorities for numerous threads, added a pause to the block archive writing thread that occurs between each block written to allow other threads to execute, the length of the pause is also available in the settings for modification by the user
This commit is contained in:
parent
2629e5f2e8
commit
c2d7dfe42e
@ -80,7 +80,7 @@ public class OnlineAccountsManager {
|
||||
// one for the transition period.
|
||||
private static long[] POW_VERIFY_WORK_BUFFER = new long[getPoWBufferSize() / 8];
|
||||
|
||||
private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("OnlineAccounts"));
|
||||
private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("OnlineAccounts", Thread.NORM_PRIORITY));
|
||||
private volatile boolean isStopping = false;
|
||||
|
||||
private final Set<OnlineAccountData> onlineAccountsImportQueue = ConcurrentHashMap.newKeySet();
|
||||
|
@ -118,8 +118,12 @@ public class Synchronizer extends Thread {
|
||||
}
|
||||
|
||||
public static Synchronizer getInstance() {
|
||||
if (instance == null)
|
||||
if (instance == null) {
|
||||
instance = new Synchronizer();
|
||||
instance.setPriority(Settings.getInstance().getSynchronizerThreadPriority());
|
||||
|
||||
LOGGER.info("thread priority = " + instance.getPriority());
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class PruneManager {
|
||||
}
|
||||
|
||||
public void start() {
|
||||
this.executorService = Executors.newCachedThreadPool(new DaemonThreadFactory());
|
||||
this.executorService = Executors.newCachedThreadPool(new DaemonThreadFactory(Settings.getInstance().getPruningThreadPriority()));
|
||||
|
||||
if (Settings.getInstance().isTopOnly()) {
|
||||
// Top-only-sync
|
||||
|
@ -269,7 +269,7 @@ public enum Handshake {
|
||||
private static final int POW_DIFFICULTY_POST_131 = 2; // leading zero bits
|
||||
|
||||
|
||||
private static final ExecutorService responseExecutor = Executors.newFixedThreadPool(Settings.getInstance().getNetworkPoWComputePoolSize(), new DaemonThreadFactory("Network-PoW"));
|
||||
private static final ExecutorService responseExecutor = Executors.newFixedThreadPool(Settings.getInstance().getNetworkPoWComputePoolSize(), new DaemonThreadFactory("Network-PoW", Settings.getInstance().getHandshakeThreadPriority()));
|
||||
|
||||
private static final byte[] ZERO_CHALLENGE = new byte[ChallengeMessage.CHALLENGE_LENGTH];
|
||||
|
||||
|
@ -168,7 +168,7 @@ public class Network {
|
||||
Settings.getInstance().getMaxNetworkThreadPoolSize(),
|
||||
NETWORK_EPC_KEEPALIVE, TimeUnit.SECONDS,
|
||||
new SynchronousQueue<Runnable>(),
|
||||
new NamedThreadFactory("Network-EPC"));
|
||||
new NamedThreadFactory("Network-EPC", Settings.getInstance().getNetworkThreadPriority()));
|
||||
networkEPC = new NetworkProcessor(networkExecutor);
|
||||
}
|
||||
|
||||
|
@ -156,10 +156,9 @@ public class BlockArchiveWriter {
|
||||
if (Controller.isStopping()) {
|
||||
return BlockArchiveWriteResult.STOPPING;
|
||||
}
|
||||
if (Synchronizer.getInstance().isSynchronizing()) {
|
||||
Thread.sleep(1000L);
|
||||
continue;
|
||||
}
|
||||
|
||||
// pause, since this can be a long process and other processes need to execute
|
||||
Thread.sleep(Settings.getInstance().getArchivingPause());
|
||||
|
||||
int currentHeight = startHeight + i;
|
||||
if (currentHeight > endHeight) {
|
||||
|
@ -398,6 +398,47 @@ public class Settings {
|
||||
*/
|
||||
private int dbCacheFrequency = 120;
|
||||
|
||||
/**
|
||||
* Network Thread Priority
|
||||
*
|
||||
* The Network Thread Priority
|
||||
*
|
||||
* The thread priority (1 is lowest, 10 is highest) of the threads used for network peer connections. This is the
|
||||
* main thread connecting to a peer in the network.
|
||||
*/
|
||||
private int networkThreadPriority = 5;
|
||||
|
||||
/**
|
||||
* The Handshake Thread Priority
|
||||
*
|
||||
* The thread priority (1 i slowest, 10 is highest) of the threads used for peer handshake messaging. This is a
|
||||
* secondary thread to exchange status messaging to a peer in the network.
|
||||
*/
|
||||
private int handshakeThreadPriority = 5;
|
||||
|
||||
/**
|
||||
* Pruning Thread Priority
|
||||
*
|
||||
* The thread priority (1 is lowest, 10 is highest) of the threads used for database pruning and trimming.
|
||||
*/
|
||||
private int pruningThreadPriority = 1;
|
||||
|
||||
/**
|
||||
* Sychronizer Thread Priority
|
||||
*
|
||||
* The thread priority (1 is lowest, 10 is highest) of the threads used for synchronizing with the others peers.
|
||||
*/
|
||||
private int synchronizerThreadPriority = 10;
|
||||
|
||||
/**
|
||||
* Archiving Pause
|
||||
*
|
||||
* In milliseconds
|
||||
*
|
||||
* The pause in between archiving blocks to allow other processes to execute.
|
||||
*/
|
||||
private long archivingPause = 3000;
|
||||
|
||||
// Domain mapping
|
||||
public static class ThreadLimit {
|
||||
private String messageType;
|
||||
@ -1163,4 +1204,24 @@ public class Settings {
|
||||
public int getDbCacheFrequency() {
|
||||
return dbCacheFrequency;
|
||||
}
|
||||
|
||||
public int getNetworkThreadPriority() {
|
||||
return networkThreadPriority;
|
||||
}
|
||||
|
||||
public int getHandshakeThreadPriority() {
|
||||
return handshakeThreadPriority;
|
||||
}
|
||||
|
||||
public int getPruningThreadPriority() {
|
||||
return pruningThreadPriority;
|
||||
}
|
||||
|
||||
public int getSynchronizerThreadPriority() {
|
||||
return synchronizerThreadPriority;
|
||||
}
|
||||
|
||||
public long getArchivingPause() {
|
||||
return archivingPause;
|
||||
}
|
||||
}
|
||||
|
@ -8,19 +8,22 @@ public class DaemonThreadFactory implements ThreadFactory {
|
||||
|
||||
private final String name;
|
||||
private final AtomicInteger threadNumber = new AtomicInteger(1);
|
||||
private int priority = Thread.NORM_PRIORITY;
|
||||
|
||||
public DaemonThreadFactory(String name) {
|
||||
public DaemonThreadFactory(String name, int priority) {
|
||||
this.name = name;
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
public DaemonThreadFactory() {
|
||||
this(null);
|
||||
public DaemonThreadFactory(int priority) {
|
||||
this(null, priority);;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Thread newThread(Runnable runnable) {
|
||||
Thread thread = Executors.defaultThreadFactory().newThread(runnable);
|
||||
thread.setDaemon(true);
|
||||
thread.setPriority(this.priority);
|
||||
|
||||
if (this.name != null)
|
||||
thread.setName(this.name + "-" + this.threadNumber.getAndIncrement());
|
||||
|
@ -8,15 +8,18 @@ public class NamedThreadFactory implements ThreadFactory {
|
||||
|
||||
private final String name;
|
||||
private final AtomicInteger threadNumber = new AtomicInteger(1);
|
||||
private final int priority;
|
||||
|
||||
public NamedThreadFactory(String name) {
|
||||
public NamedThreadFactory(String name, int priority) {
|
||||
this.name = name;
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Thread newThread(Runnable runnable) {
|
||||
Thread thread = Executors.defaultThreadFactory().newThread(runnable);
|
||||
thread.setName(this.name + "-" + this.threadNumber.getAndIncrement());
|
||||
thread.setPriority(this.priority);
|
||||
|
||||
return thread;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user