0

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

4

2 回答 2

2

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

所以你的情况3:

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

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

于 2013-03-26T13:22:31.923 回答
0

您可能会提高速度,但线程会产生很多开销。您需要确保正在加载大量数据,否则线程间通信的开销会杀死您。

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

于 2013-03-24T13:51:23.307 回答