ich für eine Bewertung über diese Frage vor kurzem kam:Wie groß sollte der Thread-Pool sein, um maximale Leistung zu erzielen?
ExecutorService threadpool = Executors.newFixedThreadPool(N);
for(Runnable task : tasks){
threadpool.submit(task);
}
Jede Aufgabe verbringt 25% für die Berechnung und 75% tun I/O. Angenommen, wir arbeiten an einer Quad-Core-Maschine (kein Hyper-Threading). Wie groß sollte Thread-Pool-N sein, um maximale Leistung zu erzielen, ohne Threads zu verschwenden? (Nehmen wir an, wir haben unendliche I/O-Kapazität)
Ich schätzte 16, da die Maschine unendliche I/O hat bedeutet, dass wir uns voll auf CPUs konzentrieren können. Jede Task verwendet während des Betriebs ein Viertel der CPU. Das heißt, wir können vier Tasks ausführen, um einen CPU-Kern zu sättigen, und das macht N = 16 auf einem Quad-Core-Rechner.
Update: Die Optionen für diese Fragen waren 2,4,5,6,7,8,12 und 16.
Was ist deine Antwort, wie bist du darauf gekommen, und warum denkst du nicht, dass es die richtige Antwort ist? – Andreas
meine antwort war 16, da die maschine unendliche e/a hat, bedeutet das, dass wir uns voll auf die CPUs konzentrieren können. Jede Task verwendet während des Betriebs ein Viertel der CPU. Das heißt, wir können vier Tasks ausführen, um einen CPU-Kern zu sättigen, und das macht N = 16 auf einem Quad-Core-Rechner. – Mickey
Klingt wie die richtige Antwort auf mich. – Andreas