我对C ++中的File
操作有一个非常基本的查询,如果这是一个非常愚蠢的问题,请原谅我。
在我的应用程序中,我有read/write files
的函数。
我想知道是否可以通过多线程处理来加速读/写操作。
我有这个疑问,因为 CPU可能表现更好但硬盘可能表现更差。
我有以下情况:
1.如果一次只能通过多个线程完成读取或写入,但不是两者都会怎样?
2.如果此处仅考虑1个文件,即多个线程同时对同一文件执行读/写,该怎么办?
3.如果多个线程读取/写入多个文件,只有1个线程负责文件,该怎么办?
4.如果阅读&写入是由2个不同的线程同时完成的吗?
谢谢
答案 0 :(得分:2)
多线程(和异步i / o)是延迟隐藏优化,而不是速度增强。多个线程同时访问单个文件可能不会给你带来太多帮助。线程可以帮助您的地方是,如果您在等待文件操作完成时还有其他工作要做(可能是某些用户交互)。它在您的某个操作阻塞的地方最有用(例如,您正在等待键盘/鼠标的用户输入或等待数据或连接到达网络套接字。)例如,您可能有一个与每个套接字关联的线程。
所以你的案例3:
如果多个线程读取/写入多个文件,该怎么办? 只有1个线程负责文件?
是我认为唯一有用的追求。然后,只有当您确定在文件操作正在进行时还需要执行其他操作时。
答案 1 :(得分:0)
您可能会获得速度提升,但线程涉及很多开销。您需要确保加载大量数据,否则线程间通信的开销将导致您死亡。
那说你使用各种异步文件io选项要好得多。它们大多是特定于平台的,但我相信boost :: asio可以为你抽象出来......