对单个文件进行并行 IO 读取

Parallel IO read on a single file

提问人:IRCodder 提问时间:1/27/2022 更新时间:1/27/2022 访问量:417

问:

我正在尝试读取一个相当大的文件(大约 4GB)并解析它。我利用生产者/消费者,逐行读取文件,并将其卸载进行处理。这是否可以通过启动多个 IO 线程逐块读取文件并将其从多个线程传递给使用者来并行读取单个文件本身?我一直在搜索,它说最好使用一个线程进行 IO,然后进行并行化,有人可以详细说明一下吗?

C# .NET 文件 IO

评论

3赞 canton7 1/27/2022
从磁盘上的文件读取速度受磁盘速度的限制。处理器处理数据的速度远远快于磁盘读取数据的速度。添加更多线程不会使磁盘更快 - 它仍然具有相同的最大读取速度。您可以使用单个线程轻松读取磁盘所能支持的速度:添加更多线程不会改变这一点。如果磁盘生锈,添加多个线程会使读取速度变慢,因为磁盘必须不断地在同时读取的部分之间搜索
0赞 Sean 1/27/2022
尝试查看任务并行库:learn.microsoft.com/en-us/dotnet/standard/parallel-programming/...
0赞 Franz Gleichmann 1/27/2022
好吧,如果你从一台设备读取数据,你一次只能读取一个数据块。如果您打开两个读取流,则设备的最大性能不会提高。但实际性能会下降(尤其是硬盘驱动器),因为它必须在两个流之间切换。
0赞 JonasH 1/27/2022
请注意,如果将数据拆分为多个独立的缓冲区,则解析此值将具有挑战性,因为可能会有属于多个缓冲区的行,并且需要以某种方式进行处理。
0赞 JonasH 1/27/2022
另一点是测量。在现代 SSD 上读取 4GB 文件只需几秒钟。分析应该揭示您的代码中是否有任何其他瓶颈。不要仅仅因为你使用生产者/消费者模式就认为处理是最佳的,甚至足够快。

答: 暂无答案