gpt4 book ai didi

c - C 中多线程写入单个文件的最有效方法

转载 作者:行者123 更新时间:2023-11-30 19:13:46 25 4
gpt4 key购买 nike

在继续提问之前,我首先引用了 Multiple threads writing on same file 上的答案。它指定让线程写入内存映射文件并让操作系统处理磁盘 IO。我的问题是我有一个程序,其中每个线程处理每个文件中大约 1GB 的数据,并且它们都需要根据时间戳将数据写入单个文件,并按时间顺序输出以下内容。基本假设是每个线程的输入文件已经按时间顺序排列。我的第一种方法是使用 fwrite 写入数据,但这会带来性能损失,并且每个线程写入都必须等到看到输出文件中相应的大小变化后再释放锁(基本上 fwrite 需要时间,这是显而易见的)。现在,如果我通过 fwrite 将写入替换为内存映射文件,我的脑海中会出现两个问题:1)将 4G 内存映射到文件中是否可行,我的 RAM 约为 16G。 2)与fwrite相比,性能会发生巨大变化吗?

最佳答案

不要尝试从多个线程写入同一个文件。

使用多个线程将每个文件中的条目排序到内存中的数据结构中(现代计算机应该具有执行此操作所需的 4-8GB 内存),然后使用单个线程写入文件。如果您在队列(或类似的数据结构)周围使用互斥锁,并有一个“写入器”线程,将项目从队列中弹出以写入文件,以及几个“读取器”线程,您可能能够实现性能提升。每个(原子地)将项目推送到队列。

关于c - C 中多线程写入单个文件的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35204192/

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