|
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
|
|
Множественный доступ потоков к коллекциям06.10.2014, 15:14. Показов 1808. Ответов 5
Метки нет (Все метки)
Здравствуйте. Подскажите в какую сторону копать.
У меня есть 8 потоков. Каждый поток получается данные (структура в 10 полей) от одного или нескольких устройств. Может поступать в сумме до сотни тысяч сообщение с каждого потока. Не больше 100 в секунду. Нужно реализовать: 1. Вывод всех сообщений поступающих в каждом потоке в отдельном окне. 2. Определение какие сообщения потока принадлежат какому устройству и их вывод в разных окнах. 3. Возможность построения графика в реальном времени для: любого из устройств, для нескольких устройств одного потока одновременно и напоследок построение графиков всех устройств всех потоков одновременно. Причём не с момента начала работы программы, а по желанию пользователя. Т.е. выбрал я 2 устройства из разных потоков и надо вывести ранее поступившие данные и выводить новые поступающие. 4. Ну и бэкап всех поступивших сообщений потока в txt в конце работы программы. Как я это себе представляю: 1 вариант: Одна глобальная коллекция (concurent?) к которой имеют доступ все потоки и тупо кидают в неё сообщения. Далее обработчик вытаскивает сообщения и выводит в окна для каждого из устройств и в графики. Но как будет с производительностью. Сообщения раскинуты по всей коллекции и надо будет её всю шерстить. например в ней уже 100к сообщений и я захочу открыть график двух устройств. придётся пробегать все 100к сообщений и искать нужные устройства. 2 вариант: Коллекция и обработчик для каждого потока свои. Сообщения добавляются в коллекцию потока. Обработчик обрабатывает коллекцию только своего потока и добавляет данные разных устройств в глобальную коллекцию устройств. Графики строятся по уже готовым данным глобальной коллекции устройств. Интересует как сделать лучше всего и какие технологии использовать. Спасибо!
0
|
|
| 06.10.2014, 15:14 | |
|
Ответы с готовыми решениями:
5
Доступ к коллекциям в коллекции коллекций List<T> Доступ к БД с разных потоков
|
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
| 06.10.2014, 15:45 | |
|
fidgi, большого опыта не имею в многопоточности, но имхо, если данные нужны только для чтения, то лучше второй вариант. если же данные будут изменятся, то тогда в любом случае доведется делать синхронизацию потоков, тогда уж лучше первый вариант. а насчет поиска по записям - так никто не запрещается сделать хеш-таблицу, или хотя бы словарь, а не тупо список.
1
|
|
|
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
|
|
| 06.10.2014, 16:05 [ТС] | |
|
Learx, только чтение. Можно и хеш таблицу, да.
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 06.10.2014, 17:17 | |
Сообщение было отмечено fidgi как решение
Решение
fidgi, Буфер приема на BlockingCollection<T>, с периодическим дампом в DataTable в оперативке. Соответственно графики и информация берется из DataTable обычными select'ами.
Можно конечно инфу и из коллекции брать, но выборки из нее будут очень медленными уже на 5-10к записей. PS: Есть еще вариант: каждый поток пишет данные напрямую в базу MSSQLServer, тот без труда потянет и 100 записей/сек и выборки. Но для риалтайма такая схема не пойдет.
1
|
|
|
65 / 65 / 16
Регистрация: 07.04.2014
Сообщений: 334
|
|
| 07.10.2014, 10:08 [ТС] | |
|
freeba, т.е. сделать буфер приёма (на 1000 сообщений к примеру) для всех потоков и дампить его в оперативку при наполнении. ок. А нет смысла делать несколько DataTable каждая для своего устройства?
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 07.10.2014, 12:15 | |
|
fidgi, если только каждая для своего потока, но будет сложнее делать совмещенные графики. Писать напрямую в одну таблицу из нескольких потоков будет очень медленно + эта операция не потокобезопасная.
1
|
|
| 07.10.2014, 12:15 | |
|
Помогаю со студенческими работами здесь
6
Доступ к данным из нескольких потоков Доступ к стриму из разных потоков Доступ к базе из множества потоков Доступ к данным из пула потоков Доступ к контролу из нескольких потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|