Обзор многопоточности в .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

Наши рекомендации