У меня есть следующий алгоритм для работы с файлом:
//open ifstram to read each line
//open ofstream to output each line
while (getline(ifstream, line1)){
getline(ifstream, line2) ;
getline(ifstream, line3) ;
getline(ifstream, line4) ;
//
getline(ifstream, line10) ;
for(int i = 1 ; i <= 10 ; i++)
// process line number i (some sort of character replacement, substring extraction)
output each line
}
Теперь, чтобы сделать мой код быстрее, я хочу выполнить многопоточность. Тем не менее, я не могу понять, как запустить вышеупомянутый алгоритм, используя несколько потоков, поэтому я буду быстрее & правильный вывод. Любое предложение будет полезно.
Если я правильно понимаю ваш вопрос, вы пытаетесь читать из потока и обрабатывать прочитанный материал кусками.
В этом примере есть несколько возможностей для распараллеливания.
Если вы читаете из файла, ОС может продолжить чтение содержимого файла в буфер, пока вы обрабатываете первые фрагменты.
Если источник, из которого вы читаете, не является по-настоящему линейным, вы можете создать несколько потоков и несколько рабочих, каждый из которых работает со своим собственным набором фрагментов.
В случае, если вы не можете контролировать источник данных, следующая возможность — создать один поток ввода-вывода, который помещает блоки чтения в какую-то очередь, которая управляет любым количеством рабочих. Это похоже на # 2, но расщепление происходит внутри вашего процесса. Это может быть полезно, например, если вам нужно сохранить порядок между чанками, то в этом случае один выходной работник снова соберет чанки в очереди и отсортирует и выведет их по мере их поступления.
Какой из них действительно применим к вашей ситуации, может определить только вы. Кроме того, в зависимости от соотношения ввода / вывода к требуемой обработке и накладным расходам потоков, решение № 3 может быть