gpt4 book ai didi

java - 简单异步 I/O : many threads, 一个文件

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:27 25 4
gpt4 key购买 nike

我有一个科学应用程序,我通常与 xargs 并行运行,但这种方案会导致重复的 JVM 启动成本并忽略缓存文件 I/O 和 JIT 编译器。我已经调整了代码以使用线程池,但我对如何保存我的输出感到困惑。

该程序(即新程序的一个线程)读取两个文件,进行一些处理,然后将结果打印到标准输出。目前,我通过让每个线程将其结果字符串添加到 BlockingQueue 来处理输出。只要 boolean 标志为真,另一个线程就会从队列中取出并写入文件。然后我 awaitTermination 并将标志设置为 false,触发文件关闭和程序退出。

我的解决方案似乎有点笨拙;完成此任务的最简单和最好的方法是什么?我应该如何将多个线程的主要结果数据写入单个文件?

例如,如果答案是一种广泛适用的方法,则不必特定于 Java。

更新

我正在使用“停止”作为毒丸。

while (true) {
String line = queue.take();
if (line.equals("STOP")) {
break;
} else {
output.write(line);
}
}
output.close();

我手动启动队列消费线程,然后将作业添加到线程池,等待作业完成,最后毒化队列并加入消费者线程。

最佳答案

这确实是您想要的方式,让线程将它们的输出放入队列,然后让编写器耗尽它。

为了使事情变得更简洁,您唯一可能想要做的就是不检查标志,只需将“全部完成”标记放到队列中,编写者可以使用它来知道它已完成。这样就不需要带外信号。

这很简单,您可以使用众所周知的字符串、枚举或简单的共享对象。

关于java - 简单异步 I/O : many threads, 一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637357/

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