gpt4 book ai didi

Java:异步并发写入磁盘

转载 作者:行者123 更新时间:2023-12-02 08:38:01 25 4
gpt4 key购买 nike

我的主线程中有一个函数,它将一些数据写入磁盘。我不希望我的主线程被卡住(磁盘 I/O 的高延迟)并且创建一个新线程只是为了写入是一种矫枉过正。我决定使用ExecutorService

ExecutorService executorService = Executors.newFixedThreadPool(3);

Future future = executorService.submit(new Callable<Boolean>() {
public Boolean call() throws Exception {
logger.log(Level.INFO, "Writing data to disk");
return writeToDisk();
}
});

writeToDisk是将写入磁盘的函数

这是一个好方法吗?有人可以引用更好的方法吗?

更新:数据大小将大于 100 MB。磁盘带宽为 40 MBps,因此写入操作可能需要几秒钟。我不希望调用函数被卡住,因为它必须执行其他工作,因此,我正在寻找一种方法来调度磁盘 I/O 与调用线程的执行异步。

我需要委派任务并忘记它!

最佳答案

无论如何,你的代码看起来都不错AsynchronousFileChannel来自新的非阻塞 IO。该实现使用 MappedByteBuffer通过FileChannel 。它可能会给你@Chris 所说的性能。下面是一个简单的例子:

public static void main(String[] args) {
String filePath = "D:\\tmp\\async_file_write.txt";
Path file = Paths.get(filePath);
try(AsynchronousFileChannel asyncFile = AsynchronousFileChannel.open(file,
StandardOpenOption.WRITE,
StandardOpenOption.CREATE)) {

asyncFile.write(ByteBuffer.wrap("Some text to be written".getBytes()), 0);
} catch (IOException e) {
e.printStackTrace();
}
}

关于Java:异步并发写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903853/

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