Java: параллельная фильтрация большого текстового файла при сохранении порядка - PullRequest
0 голосов
/ 05 февраля 2019

Предполагается, что у меня очень большой файл на SSD и 48 ядер.Я хочу отфильтровать текстовый файл (текстовый файл на основе строки) и оставить только определенные предложения.Затем я хочу записать отфильтрованное содержимое в новый файл, сохраняя при этом исходный порядок.

Я думаю, что параллельные потоки Java не сохранят порядок.

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

Это правильный подход и существует ли для него инфраструктура Java или она должна быть написана с нуля?

1 Ответ

0 голосов
/ 05 февраля 2019

В этом конкретном контексте работа в многопоточной среде не увеличивает производительность.

Вы выполняете тяжелые операции ввода-вывода (чтение и запись на диск), которые не могут быть выполнены разными потоками.

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

Учтите, что перед попыткой применитьсложный алгоритм многопоточности:

  • Время кодирования зависит от операций ввода-вывода?(сеть, диск, база данных ...)

Если да и исчисление не тяжелое, не стоит тратить много времени на попытки ускорить фазу исчисления, потому что операции ввода-вывода происходят вна сто или тысячи раз медленнее, чем в операциях с памятью.


Кстати попробуйте разделить время выполнения на следующие части:

  • загрузить файл в память
  • поиск по фразам
  • запись результата на диск

Если второй этап действительно быстрее по сравнению с другими, распараллеливание не является хорошим решением, но вы должны попробоватьдругие решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...