Мой mac оснащен 16 ядрами.
System.out.println(Runtime.getRuntime().availableProcessors()); //16
Я запускаю код ниже, чтобы увидеть эффективность использования моих ядер. Поток "CountFileLineThread" просто подсчитывает количество строк в файле (в папке 133 файла)
Я делаю заметки в этой строке:
ExecutorService es = Executors.newFixedThreadPool(NUM_CORES);
Где NUM_CORES находится между 1 и 16.
Вы можете отметить из приведенного ниже результата, что выше 5 ядер, производительность начинает ухудшаться. Я бы не ожидал "продукта уменьшающегося возврата" для 6 ядер и выше (кстати, для 7 ядер он занимает более 22 минут, привет!!!!), Почему мой вопрос?
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);
}
}