|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
.NET 4.x Инструмент многопоточного программирования22.09.2015, 12:18. Показов 6849. Ответов 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
Создание многопоточного приложения Оптимальная реализация многопоточного приложения Ведение лога для многопоточного приложения |
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|||||||
| 22.10.2015, 11:19 | |||||||
0
|
|||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
||||||||||||||||||||||||||||
| 22.10.2015, 12:37 [ТС] | ||||||||||||||||||||||||||||
|
Следующее, на что следует обратить внимание, - обмен сообщениями между юнитами. Сообщение напоминает почтовый обмен. У каждого юнита есть свой почтовый ящик. Разделение по отдельным ящикам больше для удобства и структуризации обмена. Почтовый ящик юнита не защищен, доступ свободен для всех юнитов системы. Каждый юнит может посылать письма любым другим юнитам, так и получать от них письма. Особенностью принятого обмена информацией является потокобезопасность и безотказность работы почтовой службы. Даже в условиях очень интенсивного обмена письмами, представьте, одновременно отсылаются десятки тысяч писем от сотен юнитов по разным адресам – гарантируется корректная доставка корреспонденции. Письмо не чистый лист бумаги, больше напоминает формуляр. Как и в обычном письме есть места обязательные для заполнения: адрес, кому, от кого, так и свободное поле, т.е само письмо; так и в сообщении есть обязательные для заполнения поля и поля для свободного обмена информацией. Формуляр представлен классом [CSHARP] Пользователь может заполнить только эту форму и закрепить ее за письмом, после этого письмо считается готовым к использованию. Шаблон подготовки и отправления письма выглядит так:
Поля письма заполняются не напрямую. Вначале нужно заполнить форму пользователя, представленную классом
Пользователь может заполнить только эту форму и закрепить ее за письмом, после этого письмо считается готовым к использованию. Шаблон подготовки и отправления письма выглядит так:
Вся процедура совершенно шаблонна. Подготовьте одно письмо, а для других писем меняйте значение полей. Следующий способ отправки письма – называется пакетная рассылка - более быстрый. Шаблон выглядит так:
Второй способ рассылки быстрее первого, особенно при пакетной рассылке. Почтовый обмен являются способом обмена информацией между юнитами. Юнит, заинтересованный в получении информации должен приостановить работу по команде ожидания письма
Добавлено через 3 минуты
0
|
||||||||||||||||||||||||||||
|
Master of Orion
|
|
| 22.10.2015, 12:41 | |
|
Dedoc, одно то, что в программе нет ни одного кастомного типа (зато есть 20 полей типа int/object) говорит о том, что вам еще есть чему учиться, прежде чем у вас получится написать достойную библиотечку такого масштаба.
0
|
|
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|||||||
| 22.10.2015, 13:11 [ТС] | |||||||
|
Вот прежде чем писать ерунду, нелишне подумать, что формуляр является стандартной формой обмена между всеми юнитами. Каждый юнит должен точно знать тип информации и естественно применяется система общих типов. А для отдельного типа информации предусмотрено поле
0
|
|||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
||
| 22.10.2015, 14:18 [ТС] | ||
|
Что касается TPL – библиотека общего плана, не уверен, что с ней будет проще работать.
0
|
||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
||||||||||||||||||||||||||||||||
| 27.10.2015, 11:31 [ТС] | ||||||||||||||||||||||||||||||||
|
Шаблон № 2. Потокобезопасное выполнение методов из юнитов Юнит есть поток, поток может выполнять обращение к стороннему методу, т.е. методу определенному вне класса реализации потока. Если несколько юнитов одновременно обратятся к одному методу, может возникнуть конкурентная ситуация не распознаваемая операционной системой, что приведет к неправильному выполнению программы. Избежать этой ситуации можно с помощью методов класса RunMetod. В классе реализованы методы:
Пример:
Для чего нужно временное хранилище? В него записывается сам входной аргумент для временного хранения
Что делать, если требуется выполнить в потокобезопасном режиме посторонний метод, предположим, метод из сторонней библиотеки. Этот метод не обязательно должен соблюдать сигнатуру метода потокобезопасного режима? Такой метод следует обернуть методом с сигнатурой потокобезопасного режима и послать на исполнение. Пример:
Этот метод будет выполнен в потокобезопасном режиме методом класса RunMetod. Таким образом достигается универсальность в подходе к потокобезопасному программированию многопоточных приложений. Любые методы можно исполнять потокобезопасно, соблюдая лишь некоторые стандартные приемы. С помощью класса RunMetod, можно легко создавать многопоточные приложения со степенью надежности кода однопоточных программ.
0
|
||||||||||||||||||||||||||||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 09.11.2015, 10:11 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
В связи с тем, что внесены серьезные коррективы в методы класса RunMetod, предыдущий пост следует считать утратившим значение. Вместо метода
Все методы класса относятся к одной из двух групп: методы с неограниченым количеством аргументов, приведенных к виду одного аргумента и методы с ограниченным количеством аргументов. 1) К первой группе относятся методы RunMetodSync и RunMetodAsync, имеющие сигнатуру вида
Первый аргумент – имя исполняемого синхронно или асинхронно пользовательского метода относящегося к типу Func<object,object>. Пользовательский метод должен принимать один аргумент типа object и возвращать значение того же типа. Второй аргумент методов первой группы – аргумент пользовательского метода типа object. Пример. Пусть требуется потокобезопасно выполнить метод задающий значение аргумента методу юнита F2.
Метод юнита F2 принимает аргумент object argument (первый по счету аргумент в списке определения метода, второй аргумент типа int зарезервирован для передачи, во время исполнения метода, номера юнита, третий аргумент – тип возвращаемого значения). Func<object ,int, object> Пусть этот аргумент типа object в упакованном виде представляет две переменные, для примера, как ссылки на исходный массив значений и обработанный массив значений: unSortedArray и sortedArray. Упакуем эти две ссылки и приведем к виду одного аргумента, так как все методы юнитов могут принимать только один аргумент типа object. Создадим массив из двух членов и инициализируем их значениями переменных.
В самом методе юнита должно быть обратное преобразование к исходному виду переменных. Пусть этот метод юнита имеет имя unitMetod2, тогда в самом начале этого метода должен располагаться код распаковки аргумента.
Метод RunMetodSync класса RunMetod имеет вид:
имя экземпляра класса, так как этим именем квалифицируется статический член класса units[myUnit]. units[myUnit] – член списка юнитов с номером myUnit. myUnit – номер юнита на котором в данный момент исполняется пользовательский метод F1, F2, или F3. Это значение передается исполнительной средой во время выполнения метода через зарезервированный в сигнатуре метода юнита аргумент int myUnit. unitRunMetod.RunMetodSync – метод RunMetodSync экземпляра класса RunMetod. SetArgumentToServerThread – первый аргумент метода RunMetodSync, представлен именем исполняемого потокобезопасно метода. endArgument – аргумент исполняемого потокобезопасно метода. Таким образом, имя метода и его аргумент передаются отдельно в качестве аргументов метода отвечающего за потокобезопасное исполнение заданного метода. 2) Методы второй группы класса RunMetod: Synchronous и Asynchronous позволяют потокобезопасно выполнять методы с ограниченным количеством аргументов, максимально – 16 и имеют более простой чем методы первой группы способ записи. Для примера вид метода с 16 аргументами.
Предыдущий пример, с использованием методов второго типа будет выглядеть следующим образом. Собственно входные аргументы самого метода юнита придется упаковать, так как сигнатура методов юнита допускает только один аргумент.
В качестве совета, при параллельном программировании с использованием библитеки классов BindingAndServiceCoreParallel, имеет смысл пользовательские методы изначально оформлять с требованием вида метода для класса RunMetod. Такие методы будут универсальными, их можно исполнять как в потокобезопасном режиме, так и обычным образом. Пример, метод считающий сумму аргументов
Пусть метод Summa расположен в месте, предоставляющем точку входа , допустим, в сторонней библиотеке. Потокобезопасный вызов метода должен осуществляться через потокобезопасный вызов оболочки этого метода.
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Master of Orion
|
||||||
| 09.11.2015, 10:43 | ||||||
0
|
||||||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
||||||
| 09.11.2015, 11:13 [ТС] | ||||||
|
Максимум 16 входных аргументов. При вызове забудьте о прототипе, просто перечисляйте аргументы. Единственное ограничение – метод всегда возвращает тип object, к конкретному типу надо приводить самостоятельно.
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 5
|
|
| 25.11.2015, 09:50 | |
|
В WPF присутствует возможность связывания данных. У вас замечательная система визуализации данных. А если потребуется, чтобы одно изменение в данных вызвало каскад изменений. Можно ли такое сделать в этой разработке?
0
|
|
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 27.11.2015, 10:17 | |
|
ну я тут темку почитал и мне кажется что это "достойный" наследник библиотеки FVMAS
![]() Dedoc, вы случаем с разработчиком FVMAS, Кольчуриным Юрием Сергеевичем, не консультировались? а то подход к написанию кода ну уж очень то похож эхх где мои 28 лет и почти 1300 страниц оффтопа по сабжу :-D на sql.ru я там знатно проржался в свое время, уж сколько там тролей выросло.... не перечесть
0
|
|
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 27.11.2015, 10:38 | |
|
ну это да... такой бред не каждый прочитать до конца может :-D
0
|
|
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
||
| 27.11.2015, 13:05 [ТС] | ||
|
Эта библиотека – комплекс классов для безопасного многопоточного программирования. На ее основе можно разрабатывать базы данных, классы позволяют реализовывать потокобезопасный доступ к источнику данных, но прямой реализации базы банных в библиотеке нет. Возможно со временем добавлю встроенную реализацию сетевой (не реляционной) базы данных.
0
|
||
| 27.11.2015, 16:51 | |
|
Не по теме:
0
|
|
|
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,840
|
|
| 27.11.2015, 18:32 | |
|
Одним словом - очередная велосипедная хрень , по сути и так все просто до невозможного в TPL.
П.С На архитектуру данной библиотеки вообще страшно смотреть.
0
|
|
| 27.11.2015, 18:32 | |
|
Паттерны многопоточного программирования Умножение матриц с использоанием многопоточного программирования Время многопоточного выполнения функции Разработка многопоточного приложения для обучения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|