gpt4 book ai didi

java - 增加内核数量时性能下降

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:37 25 4
gpt4 key购买 nike

我的 mac 配备了 16 个内核。

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

我正在运行下面的代码以查看利用我的核心的有效性。线程 'CountFileLineThread' 简单地计算文件中的行数(文件夹中有 133 个文件)

我在这一行做笔记:

ExecutorService es = Executors.newFixedThreadPool(NUM_CORES);

其中 NUM_CORES 介于 1 到 16 之间。

您会从下面的结果中注意到,超过 5 个内核时性能开始下降。我不希望 6 核及以上的“ yield 递减产品”(顺便说一句,对于 7 核,它需要超过 22 分钟,你好?!?!)我的问题是为什么?

enter image description here

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

最佳答案

我将其添加为评论,但我也会将其作为答案放入其中。因为您的测试正在执行文件 I/O,所以您可能遇到了第 6 个线程的问题,您现在正在执行过多的 I/O,从而减慢了一切。如果您真的想看到您拥有的 16 个内核的好处,您应该重写您的文件读取线程以使用非阻塞 I/O。

关于java - 增加内核数量时性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com