Rendimiento degradante al aumentar el número de núcleos.

Mi mac está armado con 16 núcleos.

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

Estoy ejecutando el siguiente código para ver la efectividad de utilizar mis núcleos. El hilo 'CountFileLineThread' simplemente cuenta la cantidad de líneas en un archivo (hay 133 archivos en una carpeta)

Estoy tomando notas en esta línea:

ExecutorService es = Executors.newFixedThreadPool(NUM_CORES);

Donde NUM_CORES está entre 1 y 16.

Observará que a partir del resultado que se encuentra debajo de los 5 núcleos, el rendimiento comienza a degradarse. No esperaría un 'producto de rendimiento decreciente' para 6 núcleos o más (por cierto, para 7 núcleos se necesitan más de 22 minutos, ¿hola?!?!) Mi pregunta es ¿por qué?

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);
}
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta