2

我需要在 /dev/shm 中创建一个大文件(几 GB)。这是Linux机器上的RAMdisk。这必须尽可能快。我目前在 C 中使用 5 个单独的 POSIX 线程来创建连续的 100 MB 段,然后我有另一个线程将它们连接到主输出文件上。

这很快,但我想更快。我可以消除连接线程吗?有没有办法打开一个文件,并让每个线程将它的 100 MB 段写入最终输出文件中的正确位置?

4

2 回答 2

3

最快的方法是调用truncate()ftruncate()扩展文件到你想要的大小。

然后,您可以mmap()将文件放入进程的内存空间,并让每个线程将其部分写入映射区域。

于 2013-06-07T12:51:18.177 回答
2

只需为每个线程打开一次文件,lseek到线程应该开始的位置,并且write正常。或者,您可以使用pwrite指定写入的位置;在这种情况下,所有线程都可以共享一个打开,因为它们不需要使用当前文件位置。

如果您想提前确保有可用空间并为整个最终文件保留,posix_fallocate应该能够为您处理好。

于 2013-06-07T13:14:54.673 回答