- •Архитектуры и модели программ и знаний
- •параллельного и распределенного программирования
- •Потоки: история
- •Введение
- •Поддержка потоков в .NET
- •Архитектура процесса .NET
- •Области приложений
- •Определение AppDomains
- •Свойства областей
- •Область действия типов и
- •Области приложений и изоляция
- •Обработка областей приложений
- •Загрузка приложения в AppDomain
- •Области приложений и выстраивание
- •Создание и запуск потока
- •Управление классом Thread
- •Управление потоками
- •Локальная память потока
- •Прерывание и прекращение потоков
- •Безопасное управление потоками
- •Синхронизированный контекст
- •Синхронизированные регионы кода
- •Синхронизация “вручную”
- •Синхронизация и классы .NET
- •Класс Timer
- •Пул потоков (ThreadPool)
- •Асинхронное
- •Шаблон проектирования
- •Пример асинхронного чтения файла
- •Пример асинхронного чтения файла
- •Асинхронные делегаты
- •Технологии параллельного
- •Классы для отладки и
- •Программная модель
- •Управление
- •Использование TraceSwitch
- •Настройка
- •Настройка TraceSwitch
- •Сравнение с Java
- •Вопросы и домашнее задание к лекции 21
Асинхронные делегаты
Вызов любого синхронного метода в асинхронном стиле
Компилятор генерирует асинхронные методы
BeginInvoke и EndInvoke
Вызов следует шаблону проектирования
Запуск операции с помощью BeginInvoke
Использование callback или опроса при ожидании завершения
Вызов EndInvoke для получения результата
(C)Сафонов В.О. 2012
Технологии параллельного
программирования Microsoft. Проект Dwarfs
OpenMP – реализация для Visual C++ прагматов стандарта OpenMP (например: #pragma OMP parallel)
MPI.NET – реализация для .NET технологии параллельного программирования MPI, основанной на обмене сообщениямиДругие технологии параллельного программирования (Visual Studio 2008/2010): TPL, PPL
Для демонстрации преимуществ данных технологий был выполнен open source- проект Parallel Dwarfs (совместно фирмой Microsoft и СПбГУ): Реализация параллельных алгоритмов для решения 13 классических задач прикладной математики с помощью технологий параллельного программирования Microsoft на языках C++ (unmanaged-код), C#, F#
Сайт проекта: http://paralleldwarfs.codeplex.com
(C) Сафонов В.О. 2012
Классы для отладки и
трассировки
Местонахождение
Пространство имен System.Diagnostics
Trace
Debug
Функциональность зависит от флагов
Trace: только трассировка
Debug: трассировка и отладка
(C) Сафонов В.О. 2012
Программная модель
Четыре метода
Write, WriteIf, WriteLine, WriteLineIf
Методы *If исполняются, только если первый аргумент положителен
Управление условием
Падение производительности при использовании *If
(C) Сафонов В.О. 2012
Управление
В процессе коллективной разработки эффективность ухудшается
Слишком много данных
Для управления потоком данных
Класс TraceSwitch
Несколько уровней отладочных печатей
0 – Печать отключена
1 – Только ошибки
2 – Предупреждения и ошибки
3 – Информация (а также ошибки и предупреждения)
4 - Детальная (все виды трассировки включены)
(C)Сафонов В.О. 2012
Использование TraceSwitch
public static void Main() |
{ |
TraceSwitch switch = |
new TraceSwitch(“SimpleSwitch", |
"Example Switch"); |
Trace.WriteLineIf(switch.TraceError, |
"Error tracing is on!") ; |
Trace.WriteLineIf(switch.TraceWarning, |
"Warning tracing is on!") ; |
Trace.WriteLineIf(switch.TraceInfo, |
"Info tracing is on!") ; |
Trace.WriteLineIf(switch.TraceVerbose, |
"VerboseSwitching is on!") ; |
} |
(C) Сафонов В.О. 2012 |
Настройка
TraceSwitch
Настройка конфигурационного файла
в формате XML
Имя файла: <program>.EXE.CONFIG
“name” – имя переключателя
“value” – числовое значение
(C)Сафонов В.О. 2012
Настройка TraceSwitch
<?xml version="1.0" encoding="UTF-8" ?> |
<configuration> |
<system.diagnostics> |
<switches> |
<add name="SimpleSwitch" value="4" /> |
<add name="AnotherSwitch" value="0" /> |
</switches> |
<!– The optional stuff --> |
<trace autoflush="true" indentsize="4" /> |
</system.diagnostics> |
</configuration> |
(C) Сафонов В.О. 2012 |
Сравнение с Java
В Java (начиная с версии 1.4) реализована следующая возможность, которую можно использовать для отладки и трассировки:
assert (Condition);
Если Condition ложно, бросается исключение
Намного менее гибкий механизм, чем API для отладки и трассировки, предоставляемый .NET
(C) Сафонов В.О. 2012
Вопросы и домашнее задание к лекции 21
Скачайте программный комплекс Parallel Dwarfs с сайта http://paralleldwarfs.codeplex.comИнсталлируйте его и запустите на Вашем компьютере, используя инструмент DwarfBench (входящий с состав комплекса)
Для сравнения, пропустите его также на имеющемся у Вас вычислительном кластере или более мощном компьютере с возможностью распараллеливания программ (multi-core)Сравните полученные результаты
Изучите параллельное программирование в .NET на примерах его использования в исходных кодах Parallel Dwarfs
(C) Сафонов В.О. 2012
