|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
Подскажите паттерн для задачи (многопоточное чтение и обработка файлов)19.10.2016, 17:28. Показов 3050. Ответов 9
Метки нет (Все метки)
Добрый день!
Есть следующая задача. Нужно делать многопоточную программу. 2 потока читают данные с винчестера и готовят списки данных (List<string>). По мере готовности они "скармливают" эти списки остальным потокам, которые их обрабатывают (делают парсинг данных), записывая результаты в общий datagridview. Мне нужно реализовать таким образом, чтобы: 1) был минимальный простой всех потоков (загрузка 100%); 2) не было переполнения оперативной памяти. Например, если в памяти уже много необработанных списков (> 1 Гб), тогда нужно временно переключить читающие с диска потоки - на обработку списков. Подскажите, есть ли готовые паттерны для подобной обработки данных? Заранее благодарен. Использую .NET Framework 4.0.
0
|
|
| 19.10.2016, 17:28 | |
|
Ответы с готовыми решениями:
9
Многопоточное чтение больших файлов Многопоточное чтение больших файлов
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
||
| 19.10.2016, 17:44 | ||
|
0
|
||
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
| 19.10.2016, 17:58 [ТС] | |
|
aquaMakc,
Почему же? Если поток, который читает файлы в массивы, делает еще некоторые операции (пропускает комментарии, отделяет команды) - то многопоточное вычисление дает преимущество. По крайней мере, на моем SSD разницу заметно сильно.
0
|
|
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
||
| 19.10.2016, 18:01 [ТС] | ||
|
Сейчас проверил:
многопоток - 151 Мб/сек один поток - 55 Мб/сек i7, SSD. Добавлено через 53 секунды
0
|
||
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
||
| 19.10.2016, 18:04 | ||
|
Suppir, на SSD может и будет заметно, в силу общего преимущества в скоростях чтения/записи по сравнению с HDD, а если ещё и контроллер умеет в несколько потоков, так вообще замечательно. Но в постановке задачи этого момента не было )
Добавлено через 1 минуту
0
|
||
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
||
| 19.10.2016, 18:08 [ТС] | ||
|
aquaMakc, понятно
![]() нужен именно многопоток. То есть, имеем 8 логических ядер. 2 ядра читают с диска/ssd и делают первичное формирование списков. А остальные потоки - обрабатывают данные списки. Если происходит переполнение памяти (слишком большая очередь необработанных списков), тогда переключать все потоки - на обработку списков. Если же очередь очень маленькая (часть ядер простаивает) - тогда увеличить количество потоков, которые читают с диска. В идеале - должна быть 100% загрузка процессора все время работы программы. Добавлено через 2 минуты в многопоточном режиме происходит построчное чтение файлов, а при чтении - сразу происходит обработка парсером. НО получается, что 1 файл обрабатывается 1 ядром процессора. При этом скорость падает, если ядер много, а файлов мало (часть ядер простаивают). Или если файлы сильно разного размера. Также скорость падает, если чтение файлов идет по сети или с медленного винчестера (рассматриваем и такой сценарий, хотя он редкий). Хотелось бы лучше распределить задачи (часть ядер - читают файлы, формируя "очередь задач", а остальные ядра - берут эти списки из очереди и занимаются их обработкой).
0
|
||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 19.10.2016, 18:33 | |
|
Suppir, если не брать во внимание все описанное выше про многопоточное чтение c диска, то я бы реализовал это как Producer-Consumer (на русском StackOvererflow по первой же ссылке из гугла показана реализация). Есть и специальный класс для этого дела-BlockingCollection.
2
|
|
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
| 19.10.2016, 19:34 [ТС] | |
|
EvilFromHell, спасибо, попробую реализовать.
0
|
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
| 20.10.2016, 09:23 | |
|
EvilFromHell, за упоминание
BlockingCollection спасибо. Не дочитал описание System.Collections.Concurrent до этого момента и строил велосипед.
0
|
|
| 20.10.2016, 09:23 | |
|
Помогаю со студенческими работами здесь
10
Какой паттерн/паттерны юзать для реализации задачи?
Чтение и обработка больших файлов Чтение и обработка текстовых файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|