gpt4 book ai didi

java - Java 中的性能/内存用于在多个文件上生成数据

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:54 25 4
gpt4 key购买 nike

问题是这样的:1. 需要为 3 个文件生成 1.000.000 个条目/文件(csv_extension)。1. 3个文件之间的数据连接如下:文件 1 - session 文件 2 - 工作流程文件 3 - 步骤

文件 2 需要包含从文件 1 生成的 Session_ID 字段,文件 3 需要从文件 2 生成的 Workflow_ID 字段,以便它们是它们之间的链接。 session 包含工作流,工作流包含步骤。

如何在生成时执行此操作而不影响性能和内存?

谢谢!

最佳答案

自然地,做任何事情都会对性能/内存产生影响,但无论如何......

这个问题最明显尴尬的部分是 CSV 文件。它是一种纯文本格式,可以有效地将您输出的每个字段呈现为可变大小的 block 。当您无法利用有关批量写入或读取的内存块的固定大小假设时,很难在文件 I/O(或任何类型的内存 I/O)中获得最佳性能。

将其与向二进制文件输出一百万个连续浮点值进行对比,其中每个浮点值将写入一个 32 位 block 。这可能发生得非常快(例如毫秒)

除此之外,以纯文本形式输出涉及到某处的词法转换,即使不考虑内存中发生的情况,这也会给 CPU 带来更大的压力。

在不深入了解具体细节的情况下,我们在分析之前无论如何都不应该了解这些细节(大多数微观优化最好保存起来以便在测量后事后应用),最初在这里利用的最有效的东西可能是并发性。

虽然您具有这些文件间依赖关系,但将一百万个条目临时存储在内存中应该相对便宜(假设每个条目不是同样聚合一百个元素或类似的东西)。您应该能够计算这些相互依赖的数据并将其存储在 volatile 内存中,而不涉及直接的文件间依赖关系。

由于顺序依赖性,计算相互依赖的数据实际上是一个串行问题,因此它必须在单个线程中执行(除非您可以在每个条目级别跨 session /工作流/步骤同时执行此操作,此时您可以并行化条目的计算)。

一旦在 volatile 内存中进行计算,您就可以并行化这三个文件中每一个文件的输出。

除此之外,在这个初始阶段可能只是确保您使用高效的 I/O API 和合理紧凑的数据表示形式,并为 volatile 内存中存储的内容提供良好的引用位置。

关于java - Java 中的性能/内存用于在多个文件上生成数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33797082/

25 4 0
文章推荐: CSS 将多个区域悬停在一个区域上,鼠标悬停在图像上
文章推荐: c++ - 为什么类内初始化器只能使用 = 或 {}?
文章推荐: html - 用曲线制作div?
文章推荐: html - 标签对
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com