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