Я хотел бы использовать API-интерфейс Visitor в Java 7 для поиска рекурсивно файлов в папке. Поскольку я буду искать большие папки, с более чем 100 000 файлами, разделенными через папки, я хотел бы сделать это параллельно.Java 7 параллельный поиск файлов рекурсивно в папке
Но я не могу, например, создать нить для каждой папки. May Fork Join может быть идеей, но из того, что я понял, FJ обычно используется, когда вы знаете данные, например, у вас есть данный массив, и вы хотите обрабатывать части из 5 элементов. Таким образом, деление и победа могут быть использованы очень хорошо в этом случае.
Итак, можете ли вы поделиться своим мнением о идее, которая может позволить мне быстро искать файлы (должна быть параллельна), а также разрешать отмену, если пользователь этого захочет.
Спасибо, Рю
Привет, Дариус, именно я думал о профилировании, но дело в том, что я не знаю, как это сделать, чтобы сравнить его с одиночной резьбой. Но я думал, что у меня есть процессор с 2 ядрами и гиперпотоками, теоретически, если я распределю 20.000 файлов/потоков, это должно быть быстрее, не так ли? Я отправлю сообщение, когда вернусь домой, некоторые номера для отдельных файлов с одним потоком. – aureliangtx
@aureliangtx вам нужно профилировать однопоточную версию и проверить, какая задача занимает больше всего времени. Вероятно, вы увидите, что 90% рабочего времени - это функция доступа к диску, а остальные 10% сравнивают имена файлов/папок. Если вы разделите эту работу на 2 ядра, вы, вероятно, получите около 4% (~ 1% для накладных расходов на синхронизацию). Вы можете пойти дальше и выполнить сравнение во время поиска, но это еще сложнее. Тогда коэффициент усиления составит 9-10%. Стоит ли работать? – Dariusz