
- •Архитектуры и модели программ и знаний
- •параллельного и распределенного программирования
- •Потоки: история
- •Введение
- •Поддержка потоков в .NET
- •Архитектура процесса .NET
- •Области приложений
- •Определение AppDomains
- •Свойства областей
- •Область действия типов и
- •Области приложений и изоляция
- •Обработка областей приложений
- •Загрузка приложения в AppDomain
- •Области приложений и выстраивание
- •Создание и запуск потока
- •Управление классом Thread
- •Управление потоками
- •Локальная память потока
- •Прерывание и прекращение потоков
- •Безопасное управление потоками
- •Синхронизированный контекст
- •Синхронизированные регионы кода
- •Синхронизация “вручную”
- •Синхронизация и классы .NET
- •Класс Timer
- •Пул потоков (ThreadPool)
- •Асинхронное
- •Шаблон проектирования
- •Пример асинхронного чтения файла
- •Пример асинхронного чтения файла
- •Асинхронные делегаты
- •Технологии параллельного
- •Классы для отладки и
- •Программная модель
- •Управление
- •Использование TraceSwitch
- •Настройка
- •Настройка TraceSwitch
- •Сравнение с Java
- •Вопросы и домашнее задание к лекции 21

Архитектуры и модели программ и знаний
Лекция 21
Распределенное и параллельное программирование в .NET
Сафонов Владимир Олегович
Профессор кафедры информатики Заведующий лабораторией Java-технологии
(http://polyhimnie.math.spbu.ru/jtl)
Санкт-Петербургский государственный университет
Email: vosafonov@gmail.com
WWW: http://www.vladimirsafonov.org

параллельного и распределенного программирования
Параллельный процесс в UNIX (1970): системные вызовы fork и join; при создании процесса полностью копируется память родителя и создается новое виртуальное адресное пространство
Поток (thread): Параллельный процесс, исполняемый в общем виртуальном адресном пространстве с родителем
Волокно (fiber): Поток, управляемый пользователем
CORBA (1988, OMG): Модель и стандарт распределенного ООП
(C)Сафонов В.О. 2012

Потоки: история
Поток – параллельная ветка (нить) исполнения приложения, которая должна выполнять логически независимую часть задачиИстория: одной из первых ОС, поддерживающих параллельное выполнение, стал UNIX (1970). Но процесс в UNIX – “тяжеловесен”, так как создание процесса приводит к созданию нового виртуального адресного пространства, что является слишком ресурсоемкой операцией
Облегченный процесс – новая разновидность процесса (Windows NT, Solaris), создание которого требует только создания нового стека. Он разделяет одно и то же адресное пространство со своим родительским процессомПоток – единица параллельного исполнения пользовательского
уровня, реализуемая облегченным процессом или набором облегченных процессов
Библиотеки поддержки многопоточности имеют различные API для разных ОС
До появления Java и .NET ни один из “мировых” языков программирования (C, C++ и др.) не имел встроенного механизма многопоточности. Эта проблема приводила к недостаточной степени переносимости приложений
(C) Сафонов В.О. 2012

Введение
Потоки
Основа для высокоуровневого планирования загрузки процессора
Дают возможность решения задач в параллельном стиле
Преимущества использования потоков
Приложение может выполнять свою задачу без блокировки GUI
Управление приоритетами задачОснова для организации потенциально больших по
времени задач
Сеоевой доступКоммуникация с сервером СУБД и др.
Недостатки использования потоков
Неизбежны накладные расходы
Контекстное переключение потоков
Усложнение модели программирования (рассмотрение задачи в “параллельном стиле”)
Накладные расходы проектирования и реализацииНакладные расходы на отладку
(C) Сафонов В.О. 2012

Поддержка потоков в .NET
Расположение API
Пространство имен System.Threading
Набор шаблонов проектирования и асинхронного программирования
Скрывает факт использования потоковПоддержка делегатов
Интерфейс IAsyncResult
(C) Сафонов В.О. 2012

Архитектура процесса .NET |
||
|
.NET process |
|
AppDomain A |
AppDomain B |
|
Shared Data |
Shared Data |
|
Shared Data |
Shared Data |
|
Thread 1 |
Thread 2 |
Thread 3 |
Thread |
Thread |
Thread |
Thread |
Thread |
Thread |
Specific |
Specific |
Specific |
Specific |
Specific |
Specific |
Data |
Data |
Data |
Data |
Data |
Data |
|
(C) Сафонов В.О. 2012 |
|

Области приложений
Абсолютно новая концепция, введенная в
.NET CLR
Но процессы и изоляция исполняемого кода использовались и раньше (Burroughs, “Эльбрус”)
Области приложений играют роль “мини- процессов” в CLR, дают возможность изоляции приложений для защиты от отказов, обозначения границ видимости типов, управления безопасностью и т.д.
(C)Сафонов В.О. 2012

Определение AppDomains
Исполняемые приложения трактуются CLR как области
Их роль в CLR аналогична роли процессов в ОС
Отношение “один ко многим”
Один процесс может содержать много областей,
но каждая область может существовать в рамках
лишь одного процесса
Управление областями намного дешевле, чем управление процессами
Поток ОС переключается между областями намного быстрее, чем между процессами
(C)Сафонов В.О. 2012

Свойства областей
Области имеют набор свойств, роль которых аналогична роли переменных окружения
Доступны в данной области с помощью методов GetData / SetData
Могут быть изменены или считаны как изнутри области, так и извне
Расширяемы
Система поиска сборок интенсивно использует свойства областей
Коллекция всех сборок, загруженных в область приложения, доступна с помощью метода GetAssemblies
Статический элемент
AppDomain.CurrentDomain возвращает ссылку на текущую область приложения
(C)Сафонов В.О. 2012

Область действия типов и
объектов CLR
Области приложения определяют границы областей действия для статических полей, типов и объектов
Каждый из объектов принадлежит только какой-либо определенной области приложения
Все загруженные типы принадлежат только одной области приложения
Статические элементы определены на уровне области приложения, а не на уровне процесса
Все типы и объекты выгружаются при выгрузке области приложения
(C) Сафонов В.О. 2012