gpt4 book ai didi

java - 并行迁移巨大的 XML 文件列表

转载 作者:行者123 更新时间:2023-11-29 04:28:50 25 4
gpt4 key购买 nike

我有代码:

final int numOfThreads = Runtime.getRuntime().availableProcessors() + 1;
final ExecutorService exec = Executors.newFixedThreadPool( numOfThreads );
final int numOfFiles = listOfAllFiles.size();
final BlockingQueue<File> queue = new ArrayBlockingQueue<File>( numOfFiles, false, listOfAllFiles );

for ( int i = 0; i < numOfThreads; i++ ) {
exec.execute( () -> {
File file = null;

while ( (file = queue.poll()) != null ) {
migrate( file );
}
} );
}

固定大小的 ExecutorServiceBlockingQueue 轮询 (XML) 文件以迁移它们。由于大多数文件都非常大(数 GB),每个线程都在执行大量 I/O。

队列是必要的吗?我不能这样做吗:

final int numOfThreads = Runtime.getRuntime().availableProcessors() + 1;
final ExecutorService exec = Executors.newFixedThreadPool( numOfThreads );

for ( final File file : listOfAllFiles ) {
exec.execute( () -> migrate( file ) );
}

我也想知道固定线程池是否是理想的选择?

最佳答案

具有固定大小线程池的 ExecutorService 是一个不错的选择。但是,我认为您应该将池大小作为调整参数。

问题是我们不知道 migrateFile 是 CPU 密集型、I/O 密集型、内存(堆 大小)密集型还是某种组合。最佳线程可能取决于此。最好的策略是做一些实验。

关于java - 并行迁移巨大的 XML 文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44746219/

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