8

我有一个非常大的文件,我需要处理每一行(文件的每一行都是独立的)。如何使用 goroutines(或者我不应该使用它们?)以最快的方式读取文件?

4

3 回答 3

13

只要您的硬盘比您的 CPU 慢几个数量级,这仍然是一种很常见的情况,那么您就不能通过向其投入更多 CPU 周期来神奇地使文件读取(域:从单个 HD)更快。(假设冷文件缓存和/或文件大小比所有可用的文件缓存大得多)。

于 2012-10-16T12:46:19.313 回答
4

在几乎所有情况下,磁盘 I/O 是限制因素,而不是 CPU 周期,使用 goroutine 不会在纯读取吞吐量方面获得优势。

相反,您应该在阅读一行之后检查是否可以稍后使用并发。如果你对一行的处理需要一些处理或等待(也许你分析它,或者将它发送到其他地方?)并发可能很有用:将它传递给另一个或几个其他 goroutine,这样就可以继续阅读协程。

于 2012-10-17T20:04:26.150 回答
1

此外,您应该尝试读取内存页面大小的数据块以最大化吞吐量(读取两个半页比读取一整页慢)。页面大小取决于您的操作系统/内核配置。

于 2012-10-19T07:37:15.407 回答