|
0 / 0 / 0
Регистрация: 16.06.2021
Сообщений: 5
|
|||||||||||||||||||||
.NET 4.x Переделка программы для использования многопоточности16.06.2021, 12:17. Показов 1439. Ответов 8
Метки многопоточность (Все метки)
Здравствуйте.
Имеется программа Windows service, написанная на C#, которая периодически получает набор данных у стороннего web-cервиса, обрабатывает их и записывает в базу данных. Изначально не подразумевалась последовательная загрузка массивов данных. Сначала грузится один набор, потом следующий и т.д. Но со временем объём загружаемых данных и кол-во наборов увеличилось и возникла необходимость загружать их в параллельном режиме. Загрузка одного набора данных стала занимать более часа. Если говорить вкратце, то требуется запуск метода одного и того же класса с различными параметрами в многопоточном режиме. Каждый поток должен запускаться в изолированном режиме и не должен каким-либо образом влиять на одновременное выполнение других аналогичных потоков. Параллельно запускаемые потоки никак между собой не взаимодействуют. Т.е. необходимо чтобы каждый поток работал только со своими экземплярами данных и никак не мог испортить значения переменных, используемых другим потоком. Грубо говоря есть некий класс DataMultiLoader, содержащий метод Load_and_Export
Я просмотрел теоретические материалы по данной теме и выяснил, что в многопоточных приложениях существует проблема состязания за ресурсы, когда один поток портит данные другого. Что надо добавить в существующий код, чтобы сделать его потокобезопасным? Использование локальных блокировок данных с конструкциями типа
Можно ли достичь нужного результата если оформить класс DataMultiLoader следующим образом?
0
|
|||||||||||||||||||||
| 16.06.2021, 12:17 | |
|
Ответы с готовыми решениями:
8
Легкая переделка для использования с двумерным массивом Ошибка при попытке использования многопоточности в моделировании системы массового обслуживания
|
|
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,690
|
|
| 16.06.2021, 14:03 | |
|
Ну так полностью изолируйте работу потока с данными, чтобы потоки никаким образом не пересекались с переменными используемыми в другом потоке и будет вам счастье. Если, как вы говорите, у вас создается класс и внутри него уже методы, которые обрабатывают данные и получают, то в каждом новом потоке создавайте объект этого класса и он будет изолирован для остальных потоков, единственное, что наверное придется лочить, это работу со статик классами, смотря конечно что там внутри них происходит и че они там обрабатывают, вызывают и принимают
0
|
|
|
0 / 0 / 0
Регистрация: 16.06.2021
Сообщений: 5
|
|||
| 16.06.2021, 14:23 [ТС] | |||
как правильно оформить статичные классы, чтобы сделать их поля и методы изолированными при параллельном использовании их разными потоками ?
0
|
|||
|
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,690
|
||
| 16.06.2021, 14:36 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 16.06.2021
Сообщений: 5
|
||
| 16.06.2021, 15:01 [ТС] | ||
если оформить статический класс в виде: [Synchronization] public static class xClass: ContextBoundObject это сделает его поля и методы изолированными для разных потоков ?
0
|
||
|
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,690
|
|||
| 16.06.2021, 15:28 | |||
|
Добавлено через 8 минут Добавлено через 5 минут Вот что пишут о нем: В некоторых отношениях этот подход выглядит как "ленивый" способ написания безопасного к потокам кода, учитывая, что не приходится углубляться в детали относительно того, какие именно аспекты типа действительно манипулируют чувствительными к потокам данными. Однако главный недостаток этого подхода состоит в том, что даже если определенный метод не использует чувствительные к потокам данные, CLR будет по-прежнему блокировать вызовы этого метода. Очевидно, что это приведет к деградации общей функциональности типа, поэтому используйте такую технику с осторожностью.
0
|
|||
|
0 / 0 / 0
Регистрация: 16.06.2021
Сообщений: 5
|
|
| 16.06.2021, 15:43 [ТС] | |
|
Ну т.е. если переделать статик классы в обычные и в участках кода, где они вызывались каждый раз создавать его новый экземпляр(объект) для вызова методов этого класса, то это сделает все поля и методы этого класса изолированными в рамках вызывающего потока ?
0
|
|
|
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,690
|
||
| 16.06.2021, 17:05 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 16.06.2021
Сообщений: 5
|
|
| 16.06.2021, 17:32 [ТС] | |
|
ну ладно, и на том спасибо
0
|
|
| 16.06.2021, 17:32 | |
|
Помогаю со студенческими работами здесь
9
Инструкция использования для программы Создание программы на руби с использованием многопоточности Переделка программы Переделка программы с С++ на 1с Переделка программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|