Leistungseinbußen bei zunehmender Anzahl von Kernen

Mein Mac ist mit 16 Kernen ausgestattet.

System.out.println(Runtime.getRuntime().availableProcessors());  //16

Ich führe den folgenden Code aus, um die Effektivität der Verwendung meiner Kerne zu überprüfen. Der Thread 'CountFileLineThread' zählt einfach die Anzahl der Zeilen in einer Datei (in einem Ordner befinden sich 133 Dateien)

Ich mache mir Notizen in dieser Zeile:

ExecutorService es = Executors.newFixedThreadPool(NUM_CORES);

Wobei NUM_CORES zwischen 1 und 16 liegt.

Sie werden anhand des Ergebnisses unten feststellen, dass die Leistung bei mehr als 5 Kernen nachlässt. Ich würde kein Produkt mit abnehmender Rendite für 6 Kerne und mehr erwarten (übrigens dauert es für 7 Kerne über 22 Minuten, hallo?!?!). Meine Frage ist, warum?

public class TestCores
{   
  public static void main(String args[]) throws Exception
  {
    long start = System.currentTimeMillis();
    System.out.println("START");

    int NUM_CORES = 1;

    List<File> files = Util.getFiles("/Users/adhg/Desktop/DEST/");
    System.out.println("total files: "+files.size());
    ExecutorService es = Executors.newFixedThreadPool(NUM_CORES);
    List<Future<Integer>> futures = new ArrayList<Future<Integer>>();
    for (File file : files)
    {
        Future<Integer> future = es.submit(new CountFileLineThread(file));
        futures.add(future);
    }

    Integer total = 0;

    for (Future<Integer> future : futures)
    {
        Integer result = future.get();
        total+=result;
        System.out.println("result :"+result);

    }

    System.out.println("----->"+total);

    long end = System.currentTimeMillis();
    System.out.println("END. "+(end-start)/1000.0);
}
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage