我正在使用Windows 7中的VS2012(64位8核)从本地硬盘读取.csv文件。在C++中,如何使用多个线程读取一个文件?
我正在阅读的文件有50,000多行,每行有200多个属性,因此读取数据并将它们提供给相应的变量非常耗时。因此,我想知道是否可以用多线程加速它,每个线程读取文件的一部分。
我已经google了一下,发现有人说,由于硬盘不是多线程,使用多线程来做到这一点将会实际上慢下来。 这是真的吗?
如果可以读取多个线程的文件,任何人都可以给我一个我可以学习的例子吗?
此外,是否有可能将明确分配给CPU内核的线程或任务?
还有一个最后的问题:我用Python读了同一个文件,并且在几秒钟内就完成了。 我可以知道为什么Python的读取速度比C++快吗?
在C++中使用STL文件缓冲的一个简单的示例一般地从文件中的确会慢下来发言多线程读数。该程序可能是多线程的,但考虑磁盘控制器和读/写磁头......可以构造此规则的例外情况,例如并行文件系统(您知道是否有),计算很多文件读取块之间的处理,以及其他一些情况。 –
您可以让一个线程读取文件,然后将块传递给多个解析器线程。理想情况下,您有一个用于保存数据的并发集合,因此工作线程可以快速有效地将解析结果插入(假设您需要将所有数据放在内存中的一个数据结构中)。 – hyde
除非在读取数据后处理数据的计算量非常大,否则使用多线程读取文件将无济于事。没有看到你如何在Python和C++中实现文件读取,很难知道为什么你在C++中看到更糟的性能。我猜你正在使用C++ API不正确或很差。 – Kylos