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

时间:2016-02-04 14:51:47

标签: c multithreading memory-management

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

1 个答案:

答案 0 :(得分:1)

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

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