2014-11-28 4 views
0

Я хочу прочитать текстовый файл с goroutines. Порядок текста, который считывается из файла, не имеет значения. Как читать файл с параллелизмом?Перейти читать текст с goroutine

scanner := bufio.NewScanner(file) 
for scanner.Scan() { 
    lines = append(lines, scanner.Text()) 
} 

Например, если текстовый файл содержит I like Go, я хочу, чтобы прочитать этот файл без опорядка. Это может быть []string{"Go", "like", "I"}

+4

Файл IO будет самой медленной частью. Использование процедур go не ускорит этот процесс. – fuz

+1

Зачем вы хотите это сделать? – peterSO

ответ

3

Прежде всего, если вы читаете io.Reader, считайте его чтением из потока. Это единственный источник входного сигнала, который вы не можете «читать параллельно» из-за его природы - под капотом вы получаете байт, ожидаете другого, получая еще один и т. Д. Токсинирование в словах происходит позже, в буфере.

Во-вторых, надеюсь, вы не пытаетесь использовать goroutines как «серебряную пулю» в «давайте добавим гуротинов и все просто ускорится». Если Go дает вам такой простой способ использования параллелизма, это не значит, что вы должны использовать его везде.

И, наконец, если вам действительно нужно разделить огромный файл на слова параллельно, и вы считаете, что разделяющая часть будет узким местом (не знаю вашего дела, но я действительно сомневаюсь в этом) - тогда вам нужно придумать собственный алгоритм и использовать пакет «os» для поиска()/Read() частей файла, каждый из которых обрабатывается собственным гуротином и каким-то образом отслеживает, какие части уже были обработаны.

Смежные вопросы