Форум программистов, компьютерный форум CyberForum.ru

Обход файловой системы и мультипоточность - C++

Войти
Регистрация
Восстановить пароль
 
SpectroShade
2 / 2 / 1
Регистрация: 02.05.2012
Сообщений: 51
12.03.2015, 18:15     Обход файловой системы и мультипоточность #1
Работаю над программой индексирования файловой системы. Все диски обходяться(как по дереву от корня) до последней папки рекурсивно и собирает данные про все файлы.

Принцип работы - создаеться вектор, наполняем его структурами в которые записаны все данные об файлах вытянутые винАпи функциями.

Процес работает очень странно, первый запуск программы проходит Файловую систему примерно 2-3 минуты, следующий запуск вдвое меньше, и все последующие столько же примерно как и второй по вермени.

Появилась идея разбить процесс на потоки, по принципу каждый диск (D,C,E..) анализировать и индексировать в новом потоке, но записывать данные все в тот же единственный вектор. Все работает.

Вопрос - как еще можно ускорить работы индексации, возможно больше потоков, или есть еще какие нибудь фишки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
12.03.2015, 20:46     Обход файловой системы и мультипоточность #2
Цитата Сообщение от SpectroShade Посмотреть сообщение
, но записывать данные все в тот же единственный вектор.
Лучше для каждого диска/потока сделать отдельный вектор, тогда не будет необходимости синхронизировать, а значит и не будет затрат на синхронный доступ.
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
13.03.2015, 18:01     Обход файловой системы и мультипоточность #3
Цитата Сообщение от SpectroShade Посмотреть сообщение
Процес работает очень странно, первый запуск программы проходит Файловую систему примерно 2-3 минуты, следующий запуск вдвое меньше, и все последующие столько же примерно как и второй по вермени.
Это связано с тем, что оглавление файловой системы попадает в дисковый кэш операционной системы, откуда в следующие разы читается уже намного быстрее.

Цитата Сообщение от SpectroShade Посмотреть сообщение
Появилась идея разбить процесс на потоки, по принципу каждый диск (D,C,E..)
Это хорошо в том случае, когда нет разбиения на логические тома (одна буква - один винчестер). Если читать одновременно оглавления разных томов с одного устройства, можно и замедление получить.

Цитата Сообщение от Avazart Посмотреть сообщение
значит и не будет затрат на синхронный доступ
Что-то я сильно сомневаюсь, что затраты на синхронизацию в данном случае вообще заметны на фоне операций ввода-вывода.
SpectroShade
2 / 2 / 1
Регистрация: 02.05.2012
Сообщений: 51
13.03.2015, 18:33  [ТС]     Обход файловой системы и мультипоточность #4
Avazart, сейчас сделаю вашу попровку и сравним результаты.

Nick Alte, значит решения по ускорению этого процеса конкретно нет?
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
13.03.2015, 19:55     Обход файловой системы и мультипоточность #5
Цитата Сообщение от SpectroShade Посмотреть сообщение
значит решения по ускорению этого процеса конкретно нет?
Думаю, здесь всё упирается в факторы, находящиеся вне компетенции программиста. Даже самым наилучшим и оптимальным образом написанная программа (например, Total Commander или FAR) будет упираться всё в те же временные рамки.
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
13.03.2015, 20:50     Обход файловой системы и мультипоточность #6
Цитата Сообщение от Nick Alte Посмотреть сообщение
Что-то я сильно сомневаюсь, что затраты на синхронизацию в данном случае вообще заметны на фоне операций ввода-вывода.
О каких операций ввода-вывода речь?
SpectroShade
2 / 2 / 1
Регистрация: 02.05.2012
Сообщений: 51
13.03.2015, 20:55  [ТС]     Обход файловой системы и мультипоточность #7
Цитата Сообщение от Nick Alte Посмотреть сообщение
Думаю, здесь всё упирается в факторы, находящиеся вне компетенции программиста. Даже самым наилучшим и оптимальным образом написанная программа (например, Total Commander или FAR) будет упираться всё в те же временные рамки.
В общей сложности, разделение на вектор-диск дал еще в среднем -8 секунд за индексакцию.
Индексация при первом запуске на 300 000 файлов: 120-150 сек , при последующих: 50-60 сек.

Остаеться распределение по типу файлов в отдельные отсеки (Музыка, Документы, Системные файлы), посомтрим сколько еще прибавиться. Спасибо
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
13.03.2015, 21:04     Обход файловой системы и мультипоточность #8
Да стоит попробовать учесть специфику поиска нужных данных/ распределенности данных по файловой системе, если таковая есть конечно. Возможно можно предусмотреть нечто вроде собственной индексации.
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
13.03.2015, 22:29     Обход файловой системы и мультипоточность #9
Цитата Сообщение от Avazart Посмотреть сообщение
О каких операций ввода-вывода речь?
Об операциях, связанных с получением информации о файлах. А почему такой вопрос вообще возник?
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
13.03.2015, 23:04     Обход файловой системы и мультипоточность #10
Nick Alte, Одно дело если вы имеете ввиду взаимодействие с файловой системой и совсем другое дело, если вы имеете ввиду вывод информации в GUI.
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
14.03.2015, 20:01     Обход файловой системы и мультипоточность #11
Avazart, загадочен и непонятен ход вашей мысли. С какой стати я бы имел в виду GUI, если ТС говорит о долгом обходе файловой системы?
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,778
Записей в блоге: 17
14.03.2015, 20:03     Обход файловой системы и мультипоточность #12
Цитата Сообщение от Nick Alte Посмотреть сообщение
Avazart, загадочен и непонятен ход вашей мысли
а при чем тут:
Цитата Сообщение от Nick Alte Посмотреть сообщение
операций ввода-вывода.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2015, 20:14     Обход файловой системы и мультипоточность #13
Файловые операции - это тоже ввод-вывод.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2015, 22:41     Обход файловой системы и мультипоточность
Еще ссылки по теме:

C++ Моделирование файловой системы FAT
Определение файловой системы C++ WinAPI
Определить тип файловой системы. Linux. C++ C++ Linux
C++ Программа, реализующая отображение файловой системы
Моделирование файловой системы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SpectroShade
2 / 2 / 1
Регистрация: 02.05.2012
Сообщений: 51
14.03.2015, 22:41  [ТС]     Обход файловой системы и мультипоточность #14
Добился обхода 300 000 файлов за 25+ секунд. Учитываеться время добавления в мульти-вектор всех данных о файле.
Yandex
Объявления
14.03.2015, 22:41     Обход файловой системы и мультипоточность
Ответ Создать тему
Опции темы

Текущее время: 19:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru