С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
oleg0506

Неоптимальный поиск по файлу в 3 параллейных потоках

18.02.2013, 17:45. Показов 609. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, Уважаемые!

если позволите, я сразу к сути:

-есть файл, в нем - 40 000 строк (2,5Мб и будет расти дальше, но не более 20Мб=200-250тыс.строк) - это такая импровизированная БД (формат записи строк в ней - предельно простой: ключ+разделитель+значение)
-при старте программы этот файл полностью загружается в объект TStringList (глобальная переменная)
-при старте программы этот файл загружается в TStringList (полностью)
-запускается 3 потока, каждый из которых обращается к этому TstringList и выполняют в нем поиск строк по собственному списку (каждого поток проверяем прим. по 10-15тыс.строк)
Важно: потоки выполняют поиск обычным циклом FOR и ф-ии Pos, пробегая по всем строкам объекта TStringList пока не встретится похожая, или не будет проверены все строки объекта. после чего выставляет либо запоминает строку кот.не нашлась, либо (если была найдена строка) - просто делает следующую итерацию проверки...
Как оказалось (по средствам проведенных мною тестов и замеров) - это самый быстрый вариант, но об этом ниже...)

Вроде бы работает, НО есть то, что меня беспокоит:

1. не страшно ли то, что обращение из потоков к общему для всех объекту TStringList выполняется - НА ПРЯМУЮ? (никакой синхронизации, критических секциций и т.п.)
я рассудил так, что - раз потоки ничего не записывают и не меняют в объекте, а только считывают из него инфу - то и конфликтов никаких быть не может! даже
если два потока попытаются считать одну и ту же запись одновременно (ведь по сути - потоки это все равно псевдо-параллейная работа, после переключения -
выделения кванта времени конкретному потоку - он все равно, в эту единицу времени, фактически работает - ОДИН!..) --- или я ошибаюсь?

2. Возможно ли увеличить скорость проверки - если для каждого потока создавать собственную копию объекта, чтобы они работали не с единым объектом в памяти, а
каждый со своей копией! (4Gb оперативки - позволяют) - может будет меньше конфликтов (если таковые имеются) и общая скорость проверки возрастет?

3. на данный момент общее время выполения всех проверок (на ноутбуке - 2 физ.ядра (2,1GHz) +2 виртуальных, память 4GB )
в 1 поток = 16 мин. (при выполнении - загрузка CPU в переделах 40-60%)
в 3 потока = 9 мин.
в 4 потока = почти те же 9 мин. --- т.е. дальнейшее увеличение кол-ва потоков уже не ускоряте процес... - Почему?

4. На данный момент поиск выполняется прямым перебором в цикле FOR с использованием функции Pos() - как оказалось это самое быстрое решение!
до этого пытался использовать встроенное средство TStringList.Values['тут искомая строка-ключ'] (т.е. поиск по имени ключа - записи в файле
как раз в этом формате, с нужным разделителем) - но оказалось скорость падает просто КАТАСТРОФИЧНО - общее время выполения,
в те же 3 потока - выполнялись 41мин!!!! (почти в 5 раз больше!!!) - Почему так? (так и не понял! + загрузка CPU держалась на уровне 92-99%)
поэтому и вернулся к обычному циклу FOR...

Что еще можно придумать?
Mожет есть более грамотное и изящное решение (с точки зрения производительности)?

Уважаемые знатоки, посоветуйте что-нибудь...
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2013, 17:45
Ответы с готовыми решениями:

Линейный поиск в потоках
кому не сложно и у кого есть IDE просто посмотрите прикрепленный проект не понимаю где ошыбка... имееться базовый класс MyThread...

поиск файлов в потоках
Добрый день! Коллеги, помогите советом: 2 дня бьюсь, не могу найти ошибку... Хочу сделать поиск файлов по содержимому в каталоге (с...

Поиск по Ini-файлу и вывод, как поиск Гугла
В общем такой вопрос, вот в ини файле есть данные. Как реализовать вывод их как в поиске гугл. Мы пишем начало записи и он предлагает...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2013, 17:45
Помогаю со студенческими работами здесь

Записать файлы указанного каталога в файл (поиск и запись осуществить в разных потоках)
вроде бы все правильно но вывода нет, что не так? Функция задания button_3 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam,...

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

Неоптимальный режим монитора samsung
Добрый день! У меня монитор samsung syncmaster 2233RZ и на компьютере стоит видеокарточка palit 660 gtx, хочу использовать частоту...

Samsung S23A700D Неоптимальный режим
Всем привет, купил я с рук монитор(FHD 120gz 2ms), при мне тестировался на xbox one, сам приставкой не владел, но на глаз, вроде были все...

поиск по файлу
s/(.+) > (.+)(( >)|(,))/$2 < $1$5/; - что это означает? есть файл, в этом файле: 1.Найти все строки, содержащие инструкции на...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru