【发布时间】:2020-12-09 16:13:57
【问题描述】:
我正在逐行读取一个大文件中的文本,对它们执行一些操作,然后将结果存储在不同的文件中。如果我有两个线程,一个从一个文件中读取数据,另一个线程是否能够同时将数据写入另一个文件?还是因为它们是同一个硬盘,所以多线程没有意义,因为它们会互相等待?
【问题讨论】:
-
如果您有 SSD,它会非常有用。如果不是,这将取决于几个因素。
-
请提供您的目标操作系统和体系结构的一些详细信息,包括磁盘技术(HDD、SSD、SAN、RAID)等。您应该期望平台会努力尽量减少这种争用,但如果您'正在写入具有单个写入头缓冲的单个盘片主轴,而聪明只能缓解目前的情况。在 C++ 中增加缓冲区大小可能是有意义的。理论上,您可以调整缓冲区大小以减少读取器和写入器之间的争用。阅读、工作、阅读交错工作、写作、工作。
-
@Persixty 我希望它是跨平台的,因此不使用任何特定于操作系统或特定于硬件的东西。只是一些通用代码,但尽可能高效
-
那么答案是“这取决于您的硬件平台的具体情况”。我想说你应该考虑缓冲,因为原则上这应该有助于减轻工作量,但如果进程在读取和进程和写入之间不平衡,你可能仍然会在缓冲区中备份数据。您可能需要多个读取器/写入器/处理器才能在某些平台上获得吞吐量。想要一个独立于平台的解决方案并不意味着有一个,因为平台各不相同。
标签: c++ multithreading file c++11