2017-02-01 1 views
1

Я пытаюсь прочитать огромный файл, содержащий слово (разная длина) в строке. Я хочу прочитать его с многопоточными данными, зависит от длины строки.Прочитано один файл с многопоточным

Например, нить один читает строки, которые имеют одну длину слова, нить две читает две длину и ...

Есть ли способ для достижения этой цели? Если да, то как повлияет производительность?

Я нашел эти примеры, но не могу соединиться.

Ссылка 1: Multithread file reading

Ссылка 2: How to read files in multithreaded mode?

+1

Нет, это было бы как в вашей ссылке # 2. Один поток будет читать файл, и если обработка будет сложной, вы можете передать строки для разных потоков для обработки. Производительность может улучшиться или не улучшиться. – Kayaman

ответ

5

Вы можете использовать несколько потоков, однако он не будет быстрее. Чтобы найти все строки заданной длины, вы должны прочитать все остальные строки.

Есть ли способ достичь этого?

Прочитайте все строки и проигнорируйте те, которые вы отфильтровываете.

Что вы можете сделать, так это обрабатывать разные строки в разных потоках, однако это зависит от того, насколько интенсивно работает CPU, помогает ли это или медленнее.

+0

Я пытаюсь сравнить слова, они являются анаграммой друг друга, и я думал, что классификация слов во время чтения поможет быстрее. Однако, как вы упомянули, чтение всех строк для поиска длин является препятствием. – user1060251

+0

Я предполагаю, что мне нужно сосредоточить чтение файла фрагментарно, как в ссылке # 2. У вас есть предложения по ускорению? – user1060251

+1

@ user1060251, если вы хотите проверить, является ли много слов анаграммой, сортировать буквы и индексировать их на карте отсортированных букв ко всем словам, которые являются анаграммами. Это даст вам сложность времени O (n). –

1

Чтение файла в режиме многопоточности может только замедлить работу, так как дисковод должен перемещать головки между несколькими точками чтения. Вместо этого передайте вычислительную работу из потока чтения в рабочий поток (ы).