c++中读写文件的多线程

Multi Threading for Reading/Writing a File in C++?

本文关键字:多线程 文件 读写 c++      更新时间:2023-10-16

我对c++中的File操作有一个非常基本的查询,如果这是一个非常愚蠢的问题,请原谅我。在我的应用中,我有read/write files的函数。我想知道是否有可能通过多线程进程来加速读/写操作。我有这个疑问,因为CPU可能表现更好,但硬盘可能表现更差。我有以下情况:1. 如果多个线程一次只完成读或写,而不是同时完成读和写,那会怎么样?2. 如果这里只考虑一个文件,即多个线程同时对同一个文件执行读/写,会怎么样?3.如果多个文件被多个线程读/写,那么只有一个线程负责一个文件呢?4. 如果读了会怎么样?写是由两个不同的线程同时完成的?谢谢你

多线程(和异步i/o)是延迟隐藏优化,而不是速度增强。通过多个线程同时访问单个文件可能不会给您带来太多好处。当您在等待文件操作完成时,如果您想要做一些其他工作(可能是一些用户交互),线程可以帮助您。它在您的一个操作阻塞的地方最有帮助(例如您正在等待来自键盘/鼠标的用户输入或正在等待数据或连接到达网络套接字)。例如,您可能有一个线程与每个套接字相关联。

所以你的情况3:

如果多个文件被多个线程读写怎么办只有1个线程负责一个文件?

是我认为唯一值得追求的。然后,只有当您确定在进行文件操作时还有其他事情需要执行

您可能会获得速度改进,但线程会带来很多开销。你需要确保你正在加载大量的数据,否则线程间通信的开销会杀死你。

也就是说,您最好使用各种异步文件io选项。它们大多是平台特定的,但我相信boost::asio可以为您抽象出来…