Ich sehe, dass die Standardgröße von ForkJoinPool.commonPool einen Thread weniger beträgt als die Anzahl der CPU-Kerne. Und um einen benutzerdefinierten Pool zu erstellen, können wir auch eines der folgenden verwenden:
Code: Select all
java.util.concurrent.ForkJoinPool.common.parallelism=30
Code: Select all
ForkJoinPool fjp = new ForkJoinPool(30);
Aber ich habe Schwierigkeiten zu verstehen, wie das tatsächlich funktioniert. Multithreading ist eine Sache des Betriebssystems. Wenn also ein Prozessor 2 Kerne und 4 Threads hat (Details zeigt OperatingSystem) und ich die Java-Parallelität auf 30 geändert habe, wie funktioniert das mit der CPU? Wie viele Threads werden maximal sofort erstellt und können gleichzeitig ausgeführt werden? Werden 30 Threads gleichzeitig erstellt und parallel verarbeitet, oder werden, da die CPU 4 Threads hat, 4 Threads erstellt und wenn sie wieder fertig ist, weitere 4 Threads wie dieser?
Oder sogar Wie stark erhöhen wir die Parallelität, und wird es selbst im Spring Boot-Batch mit höherer Rastergröße immer von den CPU-Kernen und CPU-Threads abhängen?