我需要读取一个进程大文本文件。我目前一次读取一行并同步处理它。我需要提高性能并实现磁盘访问是一个瓶颈。我想重构一个磁盘读取线程,将数据放在一个等待处理的队列上,多个线程进行处理。我担心的是,通过一次只读一行,我可能无法足够快地将数据提供给处理线程。有没有办法每次读取多行?我需要确保我不会破坏任何单词,因为处理是基于单词。
答案 0 :(得分:2)
尽管您的程序一次读取一行,但运行时库正在从文件中读取大块数据,然后从内存缓冲区中解析这些行。因此,当您读取文件的第一行时,真正发生的是运行时库加载一个大缓冲区,扫描它以找到第一行的结尾,并将该行返回给您。下次你要求一行时,运行时库不必读取,而只是找到下一行的结尾。
缓冲区的大小取决于运行时库,也可能取决于初始化文件的方式。
此外,文件系统可能会维护更大的缓冲区。例如,您的运行时库可能有一个4千字节的文件缓冲区,操作系统可能会以64千字节的块缓冲输入文件。
简而言之,您可能不需要做任何特殊操作来优化读取文本文件。你也许可以指定一个更大的文件缓冲区,在某些情况下我已经看到了这个帮助。除此之外,不值得担心。
除非您有一个特别快的磁盘子系统,否则如果您按顺序逐行读取,典型的开发人员的机器将维持每秒50到100兆字节。在大多数文本处理应用程序中,这将是您的限制因素。