Быстрое чтение файлов в golang

У меня очень большой файл, и мне нужно обработать каждую строку (каждая строка файла независима). Как я могу использовать goroutines (или не должен их использовать?) прочитать файл самым быстрым способом?

3 ответов


пока ваш жесткий диск на порядок медленнее, чем ваш процессор, что по-прежнему является довольно распространенной ситуацией, вы не можете волшебным образом сделать чтение файла (домен: с одного HD) быстрее, бросив на него больше циклов процессора. (Предполагая, что холодные Кеши файлов и / или размер файла намного больше, чем вся доступная файловая кэш-память).


как почти во всех случаях дисковый ввод-вывод является ограничивающим фактором, а не циклами процессора, вы не получите преимущества в чистой пропускной способности чтения с помощью goroutines.

вместо этого вы должны проверить, можете ли вы использовать параллелизм на один шаг позже, после чтения строки. Если ваша обработка строки требует немного обработки или ожидания (может быть, вы анализируете ее или отправляете куда-то еще?) параллелизм может быть полезен: передача его другому или нескольким другим подпрограммам go, чтобы чтение могло перейти на эту горутина.


также вы должны попытаться прочитать страница памяти размерные капли данных для максимизации пропускной способности (чтение двух половинных страниц медленнее, чем чтение одной полной страницы). Размер страницы зависит от конфигурации ОС/ядра.