Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
.NET 4.x

Инструмент многопоточного программирования

22.09.2015, 12:18. Показов 6864. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2015, 12:18
Ответы с готовыми решениями:

Создание многопоточного приложения
Делаю многопоточное приложение. Смысл в том, что в главном потоке надо изменять внутреннее состояние классов, которые выполняются в других...

Оптимальная реализация многопоточного приложения
Несколько простоватая проблема. Есть приложение, в нём пользователь запускает длительный процесс, и нужно, чтобы была возможность...

Ведение лога для многопоточного приложения
Всем привет! Задача состоит вот в чем: Создаются потоки, выполняющие какие то операции(сейчас это не важно). На главной форме есть...

74
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
27.11.2015, 19:17
Студворк — интернет-сервис помощи студентам
Злые вы все. Старался же человек. Ну не получилось, дык первый блин комом. Если дальше будет практиковаться - рано или поздно дойдет, насколько, кхм, неудачная вещь получилась. Сложная, медленная, на порядок уступающая "современным средствам параллельного программирования" (с)

PS: Библиотека никуда не годится. Спрячьте ее и никому больше не показывайте
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.11.2015, 19:31
freeba, я поначалу был достаточно вежлив, но человек настолько уверовал в свою нереальную крутость, что уже иначе не достучаться...
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
27.11.2015, 19:51
Цитата Сообщение от агерон Посмотреть сообщение
"достойный" наследник библиотеки
Ахха, у вас, программистов, тоже есть высшее существо? ))))
Инженеры прутся с Линды
Лет 20 как пишет. Всемирный разум, потомок инопланетян, гонимый ФСБ и прочими властными структурами. Неоднократно пытавшийся покинуть "родину".
0
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 5
30.11.2015, 18:24
Не совсем понятно, зачем нужен class CreateEventMetod, есть же стандартный способ обработки прерывания? Новая возможность смены контента элемента отображения очень понравилась. На досуге попробую сделать собственный браузер и переключаться между сайтами с помощью смены контента контрола, очень удобно.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.11.2015, 18:54
skilllab, я вот не пойму, он со своих твинков расхваливает библиотеку (особенно судя по количеству постов на них ), или действительно она кому-то пригождается?
1
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
30.11.2015, 23:11
Psilon, нет там ничего. Жалкие намётки на уровне 3-его курса института, вот уже (как и писал ранее) лет 20. Дальше не продвинулся. Зато амбиций на всю страну хватит. Ну и потом поржать о его "высшем разуме"
0
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
01.12.2015, 08:49  [ТС]
Цитата Сообщение от GarretShadow Посмотреть сообщение
Не совсем понятно, зачем нужен class CreateEventMetod, есть же стандартный способ обработки прерывания?
Класс CreateEventMetod можно рассматривать как сервисный метод. С его помощью упрощается программирование прерываний, особенно в случае необходимости передавать в метод обработки параметров.
Стандартный метод обработки прерывания имеет сигнатуру типа Action <object, EventArgs> и выглядит примерно так
C#
1
2
3
4
public  void  myEventMetod (  object sender, EventArgs e)
{
;
}
Передавать в метод обработки параметры через аргумент EventArgs e, - громоздкая процедура. Если есть потребность передать при прерывании дополнительные параметры, среда разработки предоставляет класс CreateEventMetod.
Класс содержит метод
C#
1
public  Action<object , EventArgs >   EventMetod(  )
Заметьте, метод возвращает метод, согласованный с сигнатурой метода аргумента обработчика прерывания и его можно чисто формально подставлять в качестве метода обработки.
C#
1
button.Click += new  RoutedEventHandler(eventButton.EventMetod());
Но нам нужен метод обработки прерывания, в упрощенной форме записи, принимающий произвольное число аргументов. Среда программирования namespace BindingAndServiceParallel требует следующую сигнатуру метода обработки прерывания
Action <object, object[] args >, т.е. пользовательский метод обработки должен быть вида
C#
1
2
3
4
public  void  myEventMetod (  object sender, object[] args  )
{
;
}
Вместо аргумента EventArgs е используется массив типа object и через него передаются значения в метод обработки прерывания. Параметры, передающиеся в метод обработки задаются при инициализации экземпляра класса CreateEventMetod

C#
1
CreateEventMetod eventButton = new CreateEventMetod(ButtonName,0,  tmp);
Здесь передаются
1. Метод обработки ButtonName с “новой” сигнатурой
2. Сами параметры, в данном случае 0 и tmp
При возникновении прерывания, т.е. нажатии на кнопку, в метод обработки будут передаваться два аргумента.
Класс предоставляет открытое свойство object[] Argument, ячейки этого массива соответствуют передаваемым параметрам и их можно произвольно изменять, тем самым задавая новые аргументы в метод обработки.
Пример, кнопка отображает количество нажатий
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int numberClick;
…
public void ButtonName(object sender, object[] args )
{  int number = (int) args[0];  
   CreateEventMetod myEventHandler =  (CreateEventMetod) args[1];
   Button bt = (Button) sender;
   bt.Content= "Click" + number.ToString();
   myEventHandler.Argument[0]= ++numberClick;
}
 
 
Button button = new Button();
button.Content="Button ";
int uselFromButton = tableBase.CreateUselFromUIelement   (button);
tableBase.BindingCellToUsel(0,2,0, uselFromButton); 
CreateEventMetod tmp=null;  
CreateEventMetod eventButton = new CreateEventMetod(ButtonName,0,  tmp);
eventButton.Argument[1]=eventButton;
button.Click += new  RoutedEventHandler(eventButton.EventMetod());
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,030
Записей в блоге: 1
01.12.2015, 10:46
Цитата Сообщение от Dedoc Посмотреть сообщение
Пример, кнопка отображает количество нажатий
А теперь напишем этот пример без библиотеки BindingAndServiceParallel:
C#
1
2
3
4
5
6
int numberClick = 0;
void OnButtonClick(object sender, RoutedEventArgs e)
{
    Button btn = (Button)sender;
    btn.Content = "Button " + (++numberClick);
}
На этом примере ясно видно что библиотека BindingAndServiceParallel упрощает код.
0
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
01.12.2015, 12:27  [ТС]
Предыдущий пример должен иметь вид
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void ButtonName(object sender, object[] args )
{  int number = (int) args[0];  
   CreateEventMetod myEventHandler =  (CreateEventMetod) args[1];
   Button bt = (Button) sender;
   bt.Content= "Click" + number.ToString();
  ((int) myEventHandler.Argument[0])++;
}
 
 
Button button = new Button();
button.Content="Button ";
int uselFromButton = tableBase.CreateUselFromUIelement   (button);
tableBase.BindingCellToUsel(0,2,0, uselFromButton); 
CreateEventMetod tmp=null;  
CreateEventMetod eventButton = new CreateEventMetod(ButtonName,0,  tmp);
eventButton.Argument[1]=eventButton;
button.Click += new  RoutedEventHandler(eventButton.EventMetod());
0
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
11.12.2015, 13:12  [ТС]
Цитата Сообщение от GarretShadow Посмотреть сообщение
В WPF присутствует возможность связывания данных. У вас замечательная система визуализации данных. А если потребуется, чтобы одно изменение в данных вызвало каскад изменений. Можно ли такое сделать в этой разработке?
Сейчас занимаюсь механизмом связывания, застрял на универсальном алгоритме работы с графами , та еще головомойка, но думаю к понедельнику закончить.
0
67 / 33 / 2
Регистрация: 11.10.2011
Сообщений: 128
14.12.2015, 14:25
Автор, вы наверное какой то научный работник ? Степень имеете?
0
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 5
06.04.2016, 18:24
Сергей Васильевич, какое можно ожидать ускорение при применении 32-х и 64-х ядерных процессоров?
0
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
07.04.2016, 11:02  [ТС]
Цитата Сообщение от GarretShadow Посмотреть сообщение
Сергей Васильевич, какое можно ожидать ускорение при применении 32-х и 64-х ядерных процессоров?
Прежде чем ответить на конкретный вопрос, сделаю несколько замечаний общего характера. Прежде всего, приятно видеть, что такого рода разработки начинают проникать в программистскую среду. Только что на Хабре прочитал заметку о похожей системе https://habrahabr.ru/post/280732/. .Нет сомнения, что подобные фреймворки будут появляться и в дальнейшем. Данная разработка основана на оригинальном lock-free алгоритме, гарантирующем высокую производительность программы и потокобезопасный характер выполнения методов. Также предусмотрена система обмена информацией в многопоточной среде. Часто ,при упоминании о подобных системах, приходится слышать “асинхронное программирование”. Думаю, что это не совсем правильное выражение. Речь идет о многопоточном программирование, поэтому “асинхронное” следует заменять на “многопоточное”. Дело в том , что при асинхронном программирование упор делается на основной поток (процесс), по отношению к которому независимо выполняется другой поток, и про этот поток говорят, что он выполняется асинхронно. При таком программировании, основной поток выполняет очень важную роль, он является своего рода связующим элементом программы своего рода плацентой , в которой реализуется бизнес-процесс. Остальные потоки для него асинхронные. При многопоточном программировании логика программного процесса иная, здесь также существует главный поток, но его роль вспомогательная, он своего рода стартер, запускающий основной двигатель. Сам бизнес-процесс реализуется как логика взаимоотношений самостоятельных сущностей, в разработке именуемых юнитами. Такой подход к организации конструирования программ следует считать более прогрессивным, т.к. он создает условия для реализации сложных программных продуктов с естественным для параллельных процессов характером поведения программных единиц.
Что касается конкретно самого вопроса, то ответ совершенно прост. Можно рассчитывать на N-4 кратное увеличение скорости выполнения программы по сравнению с ее однопоточным вариантом. На 32-х ядерном процессоре, - ускорение будет приблизительно 28 раз, на 64-х ядерном - 60 раз.
Все-таки хотелось бы отметить, что ускорение выполнения программ, хотя и важное направление, но не единственное для многопочного программирования. Основным нужно считать простой способ реализации логики сложных реальных процессов.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
07.04.2016, 11:17
Dedoc, госпаде какой же бред... Уважаемый вы не понимаете о чем рассуждаете. Давайте я вам задам несколько наводящих вопросов:

1. Почему async/await появились в шарпе после "более прогрессивного" параллельного программирования?
2. Почему больше 8-16 исполнительных ядер не нужно для прикладных задач? Давно уже существуют процессоры с 32+ ядрами однако их используют только на крайне узком круге задач.
3. Почему вашу разработку нельзя назвать основанной на lock-free алгоритме?

Ваша разработка дикий треш сливающий TPL по всем параметрам. И уж точно не имеющая никакого отношения к Hangfire или другим планировщикам типа Quartz.net.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.04.2016, 13:06
freeba, 2.
Кликните здесь для просмотра всего текста
Если речь о законе Амдала, то есть и другие метрики
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2016, 13:06

Нужен совет по архитектуре многопоточного приложения
Здравствуйте. Есть приложение WPF MVVM, которое обрабатывает файлы. Так как обработка файлов занимает время, то хотелось бы информировать...

Паттерны многопоточного программирования
Добрый день. Есть ли какие либо шаблоны. Есть желание с темой познакомиться хорошо. Пока хочу создание потоков и работу с ними...

Умножение матриц с использоанием многопоточного программирования
Нужно переделать однопоточное в многопоточное :( using System; using System.Collections.Generic; using System.Linq; using...

Время многопоточного выполнения функции
Этот код исполняется за 0.4 сек на моём компьюетере private void Foo() { for (int i = 0; i &lt; 100000000;...

Разработка многопоточного приложения для обучения
какую бы многопоточную программу написать новичку чтоб опыта набратся есть предложения?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
75
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru