用于在C ++中读取/写入文件的多线程?

时间:2013-03-24 13:46:15

标签: c++ multithreading file

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

2 个答案:

答案 0 :(得分:2)

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

所以你的案例3:

  

如果多个线程读取/写入多个文件,该怎么办?   只有1个线程负责文件?

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

答案 1 :(得分:0)

您可能会获得速度提升,但线程涉及很多开销。您需要确保加载大量数据,否则线程间通信的开销将导致您死亡。

那说你使用各种异步文件io选项要好得多。它们大多是特定于平台的,但我相信boost :: asio可以为你抽象出来......