Обзор многопоточности в .Net
Цель работы: научиться проводить анализ преимуществ, недостатков, проблем многопоточностив.NET
Оборудование:Персональный компьютер с ОС Linux
Индивидуальное задание.Провести анализ многопоточности, выявить особенности, достоинства и недостатки многопоточности в .NET.
Теоретические сведения
NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения CommonLanguageRuntime (CLR), которая подходит для разных языков программирования.
Считается, что платформа .NET Framework явилась ответом компании Microsoft на набравшую к тому времени большую популярность платформу Java компании SunMicrosystems (ныне принадлежит Oracle).
Почти все возможности .NET Framework доступны через обширное множество управляемых типов. Эти типы организованы в иерархические пространства имен и упакованы в набор сборок, которые вместе со средой CLR составляют платформу .NET.
NET Framework состоит из прикладных API-интерфейсов, большинствоиз которых покрывают три области функциональности:
• технологии пользовательских интерфейсов;
• технологии серверной части;
• технологии распределенных систем.
Функциональные возможности .NET Framework:
• Обширная поддержка асинхронности через методы возврата из задач.
• Поддержка протокола сжатия ZIP.
• Улучшенная поддержка HTTP через новый класс HttpClient.
• Улучшение показателей производительности для сборки мусора и извлеченияресурсов сборки.
• Поддержка взаимодействия WinRT и API-интерфейсов для построения планшетных приложений в стиле Metro.
Платформа .NET Framework предоставляет потоковую модель для низкоуровневого ввода-вывода. Обычно для чтения и записи непосредственно в файлы и сетевыеподключения используются потоки данных, которые могут быть соединены или помещены внутрь декорированных потоков для добавления функциональности сжатияили шифрования.
Асинхронные функции C# 5 значительно упрощают параллельное программирование, поскольку они уменьшают потребность в работе с низкоуровневыми технологиями. Тем не менее, все еще возникают ситуации, при которых нужны сигнальныеконструкции, локальное хранилище потока, блокировки чтения/записи и т.п.
Поток может находиться в одном из нескольких состояний. В целом, поток может быть выполняющимся; готовым к выполнению, как только он получит время и ресурсы ЦП; приостановленным, т.е. временно не выполняющимся; возобновленным в дальнейшем; заблокированным в ожидании ресурсов для своего выполнения; а также завершенным, когда его выполнение окончено и не может быть возобновлено.
В среде .NET Framework определены две разновидности потоков: приоритетный и фоновый. По умолчанию создаваемый поток автоматически становится приоритетным, но его можно сделать фоновым. Единственное отличие приоритетных потоков от фоновых заключается в том, что фоновый поток автоматически завершается, если в его процессе остановлены все приоритетные потоки.
В связи с организацией многозадачности на основе потоков возникает потребность в особого рода режиме, который называется синхронизацией и позволяет координировать выполнение потоков вполне определенным образом. Для такой синхронизации в C# предусмотрена отдельная подсистема.
Все процессы состоят хотя бы из одного потока, который обычно называют основным, поскольку именно с него начинается выполнение программы. Из основного потока можно создать другие потоки.
В языке C# и среде .NET Framework поддерживаются обе разновидности многозадачности: на основе процессов и на основе потоков. Поэтому средствами C# можно создавать как процессы, так и потоки, а также управлять и теми и другими. Для того чтобы начать новый процесс, от программирующего требуется совсем немного усилий, поскольку каждый предыдущий процесс совершенно обособлен от последующего.
Намного более важной оказывается поддержка в C# многопоточной обработки, благодаря которой упрощается написание высокопроизводительных, многопоточных программ на C# по сравнению с некоторыми другими языками программирования.
Для создания потока необходимо указать метод, используемый для выполнения потока.
• Основные операции
o Запуск
o Ожидание завершения
o Запрос досрочного завершения
Пулы потоков:
• Запросы сервера удобно обрабатывать в отдельных потоках
• Большое количество запросов – большое количество потоков – медленная работа
• Необходимо ограничить количество потоков – так появился пул потоков
Таймеры:
• Выполнение периодически повторяющихся операций
• Выполнение операций по истечении указанного интервала времени
• Для выполнения операции таймера используется отдельный поток
• Виды таймеров
o System.Threading.Timer – обычный
o System.Windows.Forms.Timer – «оконный», без создания дополнительного потока
o System.Timers.Timer – устаревший класс
Обработка исключений:
• Исключение может произойти в любом потоке
• Исключение будет выбрасываться повторно
Контекст выполнения потока. Контекст включает:
o Параметры безопасности
o Параметры локализации
o Параметры транзакций
Контекст занимает много места и копируется в создаваемые потоки
• У процессора есть кэш, ускоряющий работу с памятью
o Данные читаются в кэш из памяти
o Данные модифицируются в кэше
• При совместном использовании памяти несколькими ядрами каждое ядро имеет свой кэш
Недостатки традиционной реализации многопоточности
• Традиционные средства императивных языков программирования рассчитаны на однопоточное выполнение инструкций
• Расширение возможностей языков программирования по поддержке многопоточности обеспечивается за счёт применения готовых библиотек и API операционных систем
o Предоставляются низкоуровневые примитивы, ориентированные на реализацию потоков и их синхронизацию, но не распараллеливание обычных алгоритмов
o Реализация и отладка даже несложных алгоритмов в многопоточных программах становится трудной задачей
o Требуется значительное время на обеспечение приемлемого качества кода
o Необходимо самостоятельно управлять количеством потоков с учётом аппаратных возможностей
o Разработанный код трудно обслуживать и использовать повторно.
Преимущества использования пула потоков
• Возможность одновременно обрабатывать ограниченное количество запросов клиентов с постановкой в очередь ожидающих запросов
• Эффективно при наличии значительного числа операций ввода-вывода и ожидания внешних сервисов
• Повышение эффективности использования аппаратных ресурсов системы
• Возможность быстро запускать обработку поступившего запроса при наличии одного или нескольких свободных потоков в пуле.
Ход работы:
1. Ознакомиться с теоретическими сведениями.
2. Провести анализ многопоточности, выявить особенности, достоинства и недостатки. Результаты оформить в таблице.
Содержание отчета
Отчет по практической работе должен содержать следующие пункты:
- название практической работы;
- цель работы;
- краткие теоретические сведения;
- индивидуальное задание для выполнения практической работы;
- краткое описание хода выполнения работы;
- результаты выполнения работы;
- выводы.
Практическая работа №14