|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
.NET 4.x Инструмент многопоточного программирования22.09.2015, 12:18. Показов 6225. Ответов 74
Метки нет (Все метки)
Программирование многопоточных приложений крайне непростое дело. Приходится обходить много подводных камней: учитывать гонки, взаимоблокировки и др. Специально для облегчения разработки программ создан инструмент, с помощью которого эти затруднения легко разрешимы. Инструмент представляет собой библиотеку классов, написанную на C# и включающую достаточное количество методов, позволяющих просто писать довольно сложные многопоточные приложения. Всем, кто интересуется созданием параллельных программ, эта библиотека классов способна в значительной степени облегчить написание кода.
Если будут какие-то вопросы, с удовольствием отвечу. А также буду весьма признателен за выявленные недостатки. Программное обеспечение исполняющей среды представлено классами пространства имен – BindingAndServisParallel. Полная документация, библиотека классов и пример хранятся: sites.google.com/site/algonauts/Home/fajly в файлах DocCoreParallel.docx, BindingAndServisCoreParallel_dll.dll, main.cs. Пример компилируется в среде Visual Studio 2010 Express на 64-х битной платформе. При компиляции проекта следует добавить ссылки: BindingAndServisCoreParallel_dll, PresentationCore, PresentationFramework, System, System.Xaml, WindowsBase Библиотеку классов BindingAndServisCoreParallel_dll версия сборки 0.0.0.1 можно использовать без ограничения в любых целях.
0
|
|
| 22.09.2015, 12:18 | |
|
Ответы с готовыми решениями:
74
Создание многопоточного приложения Оптимальная реализация многопоточного приложения Ведение лога для многопоточного приложения |
| 22.09.2015, 14:29 | |
|
Не по теме: где тут кнопка дислайк
0
|
|
|
Администратор
|
|
| 22.09.2015, 23:31 | |
|
Dedoc, что именно эта библиотека помогает делать? Есть ли примеры когда использование данной библиотеки будет удобнее чем TPL или обычные потоки? Зачем в библиотеке предназначенной для многопоточного программрования зависимость от WPF? Как насчет приложений на Windows Forms или ASP.NET?
0
|
|
|
|
|
| 23.09.2015, 09:25 | |
|
Dedoc, почему в названии библиотеки присутствует BindingAndServisCoreParallel_dll?
Servis - это какое-то новое слово? В инете полно переводчиков. Ладно в коде ошибиться в слове, ну это же название библиотеки .
0
|
|
|
|
||||||
| 23.09.2015, 09:40 | ||||||
|
ExtendetDataGrid
Добавлено через 8 минут Хотя глянул доки, там много всего, неохота разбираться. Лучше бы автор тут написал простой пример и показал в чём суть, в чём поможет эта библиотека. На конкретном маленьком примере.
0
|
||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
| 23.09.2015, 14:10 [ТС] | |
|
OwenGlendower
что именно эта библиотека помогает делать? Создавать многопоточные приложения. Основная трудность параллельного программирования, как ни покажется странным, заключается в том что код выполняется действительно параллельно на разных физических ядрах процессора. Покажу на примере. Пусть есть метод, накапливающий сумму входного аргумента. void Summa(int arg) { static int X; X=X+arg;} Каким будет значение X, если этот метод вызовут два потока каждый 50 раз и значение arg=1? Знатоки арифметики не задумываясь скажут – 100. Знатоки многопоточности – “ неизвестно”, - и этот будет правильным ответом. Значение X может быть и 100, и 99, и 98…, как придется. Подобный результат, вообще говоря, приговор для многопоточного программирования, часть информации теряется. Чтобы этого не происходило, прибегают к различным способам синхронизации потоков. Библиотека предоставляет класс RunMetod, гарантирующий правильную работу программы. Все что нужно, это оформить пользовательский метод в потокобезопасном варианте и вызывать его из любого количества потоков, результат всегда будет правильный. Из рабочих потоков невозможно обращаться к элементам управления, открывать окна, таблицы и т.д. Библиотека содержит механизм такого доступа посредством встроенного юнита SystemMailUnit. Все что нужно – сформировать письмо (естественно ,из рабочего потока), прикрепить к нему метод требующий обращения к элементу управления и отослать письмо юниту SystemMailUnit. Таким образом, из нескольких потоков можно работать с одной экранной формой. Есть ли примеры когда использование данной библиотеки будет удобнее чем TPL или обычные потоки?Примеров нет, работа с TPL и обычными потоками не конструирование многопоточной программы. Это примерно как знание алфавита и писательское творчество, большая дистанция. Зачем в библиотеке предназначенной для многопоточного программирования зависимость от WPF? Как насчет приложений на Windows Forms или ASP.NET? Зависимости от WPF нет, в библиотеке действительно используются классы платформы WPF, пример написан с использованием WPF, но это не должно помешать применению в программах использующих другие платформы. Casper-SC Dedoc, почему в названии библиотеки присутствует BindingAndServisCoreParallel_dll? Servis - это какое-то новое слово? В инете полно переводчиков. Ладно в коде ошибиться в слове, ну это же название библиотеки Автор от силы знает пару дюжин английских слов, половину из которых он пишет с ошибками. Эта проблема автору известна, постараюсь исправить название, если получится.
0
|
|
|
Master of Orion
|
|||||||
| 23.09.2015, 15:25 | |||||||
0
|
|||||||
|
Администратор
|
||||||||||
| 23.09.2015, 20:34 | ||||||||||
![]()
0
|
||||||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
| 24.09.2015, 10:37 [ТС] | |
|
Psilon
Покажите проблему, которая возникает при многопоточном программировании, и как ваша библиотека её решает. Две проблемы уже перечислены постом выше. int result = arr.AsParallel().Sum(); // вернет 100 – нет, эта конструкция запустит метод отдельно, - это не то, что имелось ввиду при сглатывании данных. OwenGlendower Если метод сделать потокобезопасным, то я не понимаю зачем мне метод RunMetod. Дело не в том, чтобы сделать метод потокобезопасным, а выдержать определенную сигнатуру метода. Сам метод – самый обычный, в теле метода нет никаких механизмов взаимодействия с потоками. Метод требует, чтобы входной аргумент и возвращаемое значение были типа Object и это все требование. Не поверишь - Dispatcher.BeginInvoke делает ровно то же самое. Согласен, в библиотеке реализована разновидность этого подхода. Сам же механизм юнитов похож на реализацию идеи обмена сообщениями между отдельными частями приложения. И если это так, то снова возникает вопрос - чем данная реализция лучше чем другие? Например Akka.NET. Никто не утверждает что реализация лучше или хуже, а по поводу Akka.NET не скажу, не знаком с ним. И отдельное спасибо OwenGlendower за список синтаксических ошибок, исправлю.
0
|
|
|
Администратор
|
|||
| 24.09.2015, 13:39 | |||
|
0
|
|||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
| 25.09.2015, 11:02 [ТС] | |
|
OwenGlendower
Тогда каким образом потенциальный пользователь поймет что ему необходима ваша библиотека? Забудем пока про сторонние библиотеки вроде Akka.NET. Хотелось бы увидеть пример демонстрирующий достоинства библиотеки в сравнении со стандартными средствами. Иначе разговоры о преимуществах библиотеки, остаются только словами. В демонстрационном примере(файл main.cs) есть образец работы с экранной формой из потока. Весь код занимает несколько десятков строк. Предложите вариант решения этой задачи стандартными методами с приемлемым объемом кода, и Вы быстро убедитесь в преимуществах библиотеки. Попробую усложнить этот пример с экранной формой, добавив вывод данных в одну экранную форму из нескольких потоков одновременно, такая задача для обычных средств будет крайне трудоемкой. Библиотека освобождает пользователя от необходимости разрешать трудные моменты многопоточного программирования, беря на себя всю черновую работу.
0
|
|
|
Администратор
|
|||
| 25.09.2015, 12:24 | |||
|
0
|
|||
|
Master of Orion
|
|
| 25.09.2015, 13:17 | |
|
т.к. меня, очевидно, решили игнорировать, отписываюсь от темы
Ничего интересного тут в любом случае.Dedoc, а вам советую научиться пользоваться функцией цитирования. А то возникают подозрения в квалификации человека, который для такой просто вещи пишет свой "велосипед" с жирным выделением.
0
|
|
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|||||||||||
| 25.09.2015, 13:32 [ТС] | |||||||||||
|
К примеру относится только этот кусок кода – 160 строк.
Psilon т.к. меня, очевидно, решили игнорировать, отписываюсь от темы Ни в коем случае, даже не думайте об этом. Что конкретно не ответил?
0
|
|||||||||||
|
Администратор
|
|
| 25.09.2015, 23:54 | |
|
0
|
|
|
|
|||||||
| 26.09.2015, 12:24 | |||||||
P.S. И да, как верно отметили, научитесь цитировать чужие высказывания, выделение просто режет глаз. Делается это очень просто: выделяете фразу в браузере (нажатием левой мышки), и появляется всплывающая подсказка Цитировать. И все.
0
|
|||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
| 28.09.2015, 10:10 [ТС] | |
|
insite2012
Уважаемая публика, пожалуйста, не думайте что Dedoc изобрел многопоточное программирование. Так или иначе методы многопоточности известны давно и широко представлены в .NET. Легко запустить поток, трудности начинаются позже. Все вами приведенные примеры имеют один недостаток, не позволяющий их практическое применение – они не потокобезопасны. Строить на их основе программы, все одно, что строить дом на песке – толку не будет. Библиотека содержит не только методы запуска параллельных процессов, она обеспечивает их корректное выполнение при любой интенсивности обмена информацией между потоками, любой интенсивности вызова методов из потока. Притом пользователь разрабатывая многопоточную программу , совершенно не ощущает трудностей, подводных камней. Библиотека абсолютно гарантирует корректную работу пользовательского приложения при любых условиях. Кроме того , библиотека – это комплекс услуг, включающих методы доступа к экранной форме, заметьте, опять же этот доступ потокобезопасный. Библиотека предоставляет инструмент с помощью которого пользователь легко создает каркас многопоточной программы. Все части кода, помещенные в юниты , выполняются независимо друг от друга и одновременно. Встроенные в .NET средства многопотчности дают лишь возможность создавать по природе своей однопоточное приложение с элементами многопоточности.
0
|
|
|
Master of Orion
|
||||||||||||||||
| 28.09.2015, 11:43 | ||||||||||||||||
|
Dedoc,
Вдохновлялись винапи? ![]() Ну и не обижайтесь, но форматирование, именование, завязка на WPF и то, что минимальный пример занимает 160 строк, в котором происходит всякое непонятное непотребство, намекают на общее качество этой библиотеки. Нужно показать собственно 2 вещи, о чем вам уже говорят неделю. Сначала код обычный, с использованием стандартной библиотеки. Где все всё знают и сразу из кода поймут, что происходит (хотя, конечно, словами сначала нужно рассказать, чтобы суть смотреть, а не разбираться в нюансах), причем желательно не более 100 строк, а потом "и вот приходит наша многопоточная библиотечка и помогает!", строк 50. Из чего делаем вывод, что она вся такая хорошая и т.п. Пример может быть простым - 1-2 кнопки на формочке, или пара текстбоксов, что угодно, что умещается в ~100 строк. ________________________________________ ___ Пример приведу. Как в .Net преобразовать структуру в набор байт? Причем любую структуру? Ну примерно так:
0
|
||||||||||||||||
| 28.09.2015, 11:43 | |
|
Помогаю со студенческими работами здесь
20
Паттерны многопоточного программирования Умножение матриц с использоанием многопоточного программирования Время многопоточного выполнения функции Разработка многопоточного приложения для обучения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|