【发布时间】:2018-09-07 20:32:44
【问题描述】:
我在一次采访中被问到这个问题。
我说让我们使用 cp。然后我被要求模仿实现 cp 本身。
所以我想好吧,让我们打开文件,一个一个地读取并写入另一个文件。
然后我被要求进一步优化它。我想让我们进行大块的读写操作。关于什么是好的块大小,我没有一个好的答案。请帮我解决这个问题。
然后我被要求进一步优化。我想也许我们可以从不同的线程并行读取并并行写入。
但我很快意识到并行读取是可以的,但写入不会并行工作(我的意思是没有锁定),因为来自一个线程的数据可能会覆盖其他线程。
所以我想好吧,让我们并行读取,将其放入队列中,然后单个线程将其从队列中取出并逐个写入文件。
这甚至会提高性能吗? (我的意思不是小文件。如果是大文件,开销会更大)
另外,有没有一种操作系统技巧,我可以将两个文件指向磁盘中的相同数据?我的意思是我知道有符号链接,但除此之外?
【问题讨论】:
-
但我很快意识到并行读取是可以的,但写入不会并行工作(我的意思是没有锁定),因为来自一个线程的数据可能会覆盖其他线程。 这是基于什么在?有多种方法可以从多个线程以不需要锁定的方式写入文件。您可以多次使用
pwrite()或open()文件。并行写入大多数文件的真正问题是物理磁盘磁头所需的额外寻道。但是,如果文件系统是高端 HPC 文件系统,则文件可以分布在多个磁盘上,并且并行写入可以更快
标签: linux file-io operating-system copy filesystems