summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin/kbackupfabric/util/ThreadingUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/keuin/kbackupfabric/util/ThreadingUtil.java')
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/ThreadingUtil.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/main/java/com/keuin/kbackupfabric/util/ThreadingUtil.java b/src/main/java/com/keuin/kbackupfabric/util/ThreadingUtil.java
new file mode 100644
index 0000000..b270895
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/ThreadingUtil.java
@@ -0,0 +1,22 @@
+package com.keuin.kbackupfabric.util;
+
+public class ThreadingUtil {
+ public static int getRecommendedThreadCount() {
+ int coreCount = Runtime.getRuntime().availableProcessors();
+
+ // if the cores are too few, we regress to single thread
+ if (coreCount <= 2)
+ return 1;
+
+ // we have multiple cores, but not too many
+ if (coreCount == 3)
+ return 2;
+
+ // if we have multiple core, but not too many, we use a half
+ if (coreCount <= 6) // 4, 5, 6 -> 3, 3, 4
+ return (coreCount + 2) / 2;
+
+ // cores are sufficient, we use almost all of them, except a fixed count remained for the OS
+ return coreCount - 2;
+ }
+}