我有一个非常大的文件,我需要处理每一行(每行文件都是独立的)。我怎样才能使用goroutine(或者我不应该使用它们?)以最快的方式读取文件?
答案 0 :(得分:13)
只要你的硬盘比你的CPU慢几个数量级,这仍然是一个非常常见的情况,那么你就不能通过投入更多的CPU周期来神奇地使文件读取(域:来自单个HD)它。 (假设冷文件缓存和/或文件大小比所有可用的文件缓存大得多)。
答案 1 :(得分:4)
在几乎所有情况下,磁盘I / O都是限制因素,而不是CPU周期,使用goroutine不会在纯读取吞吐量方面获得优势。
相反,您应该在读取一行后检查是否可以在一步之后使用并发。如果你对一行的处理需要一些处理或等待(也许你分析它,或者把它发送到其他地方?)并发可能是有用的:将它传递给另一个或几个其他的例程,所以读取可以继续够程。
答案 2 :(得分:1)
此外,您应该尝试读取memory page大小的数据blob以最大化吞吐量(读取两个半页比读取一整页慢)。页面大小取决于您的OS /内核配置。