Многопоточные приложения в Visual Studio.NET. Разработка приложения, демонстрирующего многопоточность для одного процессора

Автор работы: Пользователь скрыл имя, 09 Декабря 2013 в 22:08, курсовая работа

Описание работы


Современные операционные системы (OC) нацелены на наиболее эффективное использование ресурсов компьютера. По большей части эффективность достигается за счет разделения ресурсов компьютера между несколькими процессами. Многопоточность является естественным продолжением многозадачности, точно также как виртуальные машины, позволяющие запускать несколько ОС на одном компьютере, представляют собой логическое развитие концепции разделения ресурсов. В многопоточном приложении одновременно работает несколько потоков. Иногда вместо термина "поток" используется термин "нить". Потоки – это независимые друг от друга задачи, выполняемые в контексте процесса. Поток использует код и данные родительского процесса, но имеет свой собственный уникальный стек и состояние процессора, включающее указатель команд.

Содержание работы


РЕФЕРАТ…………………………………………………….…………
4
СПИСОК СОКРАЩЕНИЙ…………………………………………….
5
СОДЕРЖАНИЕ…………………………………………………………
6
ВВЕДЕНИЕ…………………………………………………………….
7
1 КОНЦЕПЦИЯ МНОГОПОТОЧНОСТИ……………………………
9
2 БИБЛИОТЕКА ПАРАЛЛЕЛЬНЫХ ЗАДАЧ (TPL) ………………..
11
2.1 Основные нововведения TPL……………………………………
11
2.2 Параллелизм данных……………………………………………
17
2.3 Параллелизм задач……………………………………………….
20
2.4 Потенциальные ошибки, связанные с параллелизмом

данных и задач……………………………………………………
21
3 СОЗДАНИЕ МНОГОПОТОЧНОГО ПРИЛОЖЕНИЯ В СРЕДЕ

VISUAL STUDIO.NET………………………………………………
23
3.1 Структурная схема программы …………………………………
23
3.2 Разработка и оптимизация кода программы на C#…………….
25
4 ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ………………………………..
30
ЗАКЛЮЧЕНИЕ………………………………………………………..
35
Литература…………………………………………………………

Файлы: 1 файл

Курсяк C#.docx

— 192.86 Кб (Скачать файл)

Министерство  образования и науки РФ

 

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ВОРОНЕЖСКИЙ  ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ 

УНИВЕРСИТЕТ» 

(ФГБОУ ВПО «ВГТУ»)

 

Факультет вечернего и заочного обучения

 

Кафедра «Автоматизированные  и вычислительные системы»

Специальность «Вычислительные машины, комплексы,

системы и  сети»

 

 

КУРСОВОЙ  ПРОЕКТ

 

 

по дисциплине «Программирование на С/С++»

 

Тема: «Многопоточные приложения в Visual Studio.NET. Разработка приложения, демонстрирующего многопоточность для одного процессора»

 

 

 

 

Расчетно-пояснительная записка

 

 

 

Разработал студент      гр. ВМ-101                                  А.В. Гулевский        

                 подпись,  дата                    инициалы,  фамилия

Руководитель                                                                          Е.А.Ганцева     

                 подпись,  дата                    инициалы,  фамилия

 

Нормоконтролер                                                                  В.А.Качанов     

        подпись,  дата                     инициалы,  фамилия

 

Защищен ________________          Оценка ___________________

                   дата

 

 

 

 

Воронеж 2012

МИНИСТЕРСТВО  ОБРАЗОВАНИЯ РФ

 

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ВОРОНЕЖСКИЙ  ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ 

УНИВЕРСИТЕТ»

(ГБОУВПО «ВГТУ»)

 

Кафедра «Автоматизированные  и вычислительные системы»

 

ЗАДАНИЕ

на курсовой проект

по дисциплине «Программирование на С/С++»

 

Тема проекта: «Многопоточные приложения в Visual Studio.NET. Разработка приложения, демонстрирующего многопоточность для одного процессора.»

 

Студент группы ВМ-101     Гулевский Алексей Владимирович

фамилия, имя, отчество

 

Номер варианта___7____________________________________

Технические условия: разработать  в среде программирования Visual Studio .NET многопоточное приложение.

 

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

 

Сроки выполнения этапов: анализ задачи, обзор литературы, выбор технологии разработки – до 15.10.2012 г., проектирование, реализация – до 20.11.2012 г., отладка приложения, анализ результатов до 05.12.2012 г., оформление расчетно-пояснительной записки, составление электронной презентации – до 15.12.2012 г.

Срок защиты курсовой работы   ____________25.12.2012 г._______

 

 

Руководитель                                        /                             Е.А. Ганцева       /

подпись,  дата                         инициалы,  фамилия

 

Задание принял студент    гр. ВМ-101 /                             А.В. Гулевский    /

подпись,  дата                          инициалы,  фамилия

 

ЗАМЕЧАНИЯ РУКОВОДИТЕЛЯ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РЕФЕРАТ

 

Пояснительная записка 39 с., 7 рисунков, 6 источников, 1 приложение.

Ключевые слова: VISUAL STUDIO .NET, C++, С#, МНОГОПОТОЧНОСТЬ, TRADE.

Объект исследования или разработки – многопоточное приложение, построенное в среде Visual Studio .NET.

Цель работы – изучить технологию создания многопоточных приложений в современных системах программирования.

Метод исследования и аппаратура –  интегрированная среда разработки приложений Visual Studio .NET, программное моделирование на ЭВМ.

Полученные результаты – приложение, демонстрирующее демонстрирующего многопоточность для одного процессора.

Основные конструктивные, технологические  и технико-эксплуатационные характеристики – персональная ЭВМ с емкостью оперативной памяти не меньше 512 Мб, оснащенная Windows XP и выше.

Степень внедрения – применена  технология разработки многопоточных приложений в среде Visual Studio .NET, создан программный продукт.

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК СОКРАЩЕНИЙ

 

OC – Операционная система

API - application programming interface

TPL – System Threading Tasks

HTML - HyperText Markup Language

URL - Uniform Resource Locator

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СОДЕРЖАНИЕ

 

РЕФЕРАТ…………………………………………………….…………

4

СПИСОК СОКРАЩЕНИЙ…………………………………………….

5

СОДЕРЖАНИЕ…………………………………………………………

6

ВВЕДЕНИЕ…………………………………………………………….

7

1 КОНЦЕПЦИЯ  МНОГОПОТОЧНОСТИ……………………………

9

2 БИБЛИОТЕКА ПАРАЛЛЕЛЬНЫХ ЗАДАЧ (TPL) ………………..

11

   2.1 Основные нововведения TPL……………………………………

11

   2.2  Параллелизм данных……………………………………………

17

   2.3 Параллелизм задач……………………………………………….

20

   2.4  Потенциальные ошибки, связанные с параллелизмом

 

         данных и задач……………………………………………………

21

3 СОЗДАНИЕ МНОГОПОТОЧНОГО  ПРИЛОЖЕНИЯ В СРЕДЕ 

 

   VISUAL STUDIO.NET………………………………………………

23

   3.1 Структурная схема программы …………………………………

23

   3.2 Разработка и оптимизация кода программы на C#…………….

25

4 ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ………………………………..

30

ЗАКЛЮЧЕНИЕ………………………………………………………..

35

Литература…………………………………………………………

36

Приложения  ……………………………………………………….

37


 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

 

Современные операционные системы (OC) нацелены на наиболее эффективное использование ресурсов компьютера. По большей части эффективность  достигается за счет разделения ресурсов компьютера между несколькими процессами.  Многопоточность является естественным продолжением многозадачности, точно также как виртуальные машины, позволяющие запускать несколько ОС на одном компьютере, представляют собой логическое развитие концепции разделения ресурсов. В многопоточном приложении одновременно работает несколько потоков. Иногда вместо термина "поток"  используется термин "нить". Потоки – это независимые друг от друга задачи, выполняемые в контексте процесса. Поток использует код и данные родительского процесса, но имеет свой собственный уникальный стек и состояние процессора, включающее указатель команд.

 Потоки  часто становятся источниками  программных ошибок особого рода. Эти ошибки возникают при использовании  потоками разделяемых ресурсов  системы (например, общего адресного  пространства) и являются частным  случаем более широкого класса  ошибок - ошибок синхронизации. Если  задача разделена между независимыми  процессами, то доступом к их  общим ресурсам управляет операционная  система и вероятность ошибок  из-за конфликтов доступа снижается.  Важнейшее преимущество потоков  перед самостоятельными процессами  заключается в том, что накладные  расходы на создание нового  потока в многопоточном приложении  оказываются ниже, чем накладные  расходы на создание нового  самостоятельного процесса. Уровень  контроля над потоками в многопоточном  приложении выше, чем уровень  контроля приложения над дочерними  процессами. Кроме того, многопоточные  программы не склонны оставлять  за собой вереницы "осиротевших"  независимых процессов. Для порождения  дочернего процесса, находясь в  родительской программе, поток  получает копии виртуальной памяти  дескрипторов файлов и пр. Модификации  содержимого памяти, закрытие файлов и другие подобные действия в дочернем процесса не влияют на работу родительского процесса и наоборот. С другой стороны, когда программа создает поток, ничего не копируется. Оба потока – старый и новый – имеют доступ к общему виртуальному пространству, общим дескрипторам файлов и другим системным ресурсам. Если, к примеру, один поток меняет значение переменной, это изменение отражается на другом потоке. Точно так же, когда один поток закрывает файл, второй поток теряет возможность работать с этим файлом.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 КОНЦЕПЦИЯ  МНОГОПОТОЧНОСТИ

 

Фундаментальными понятиями, связанными с многопоточным программированием, являются «процесс» (process) и «поток» (thread). Для эффективного многопоточного программирования необходимо довольно хорошо видеть разницу между данными  терминами.

Важную роль в параллельном программировании играет понятие процесса. Процессом  часто называют экземпляр выполнения программы. И, порой, кажется,   что  понятия процесса и программы  практически одинаковы, но на самом  деле они отличатся на фундаментальном  уровне. Если программа представляет собой статический набор команд, то процесс является набором ресурсов и данных, которые используются в  ходе выполнения программы.

Другим фундаментальным понятием является поток. Под потоком понимают некую сущность внутри процесса, отвечающую за исполнение кода, содержащегося  в адресном пространстве процесса. В каждом процессе есть минимум один поток (первичный), который автоматически  создается системой в момент возникновения  процесса. Далее первичный поток  может порождать другие потоки, а  те в свою очередь новые и так  далее.

Потоки, работающие параллельно в  одном процессе, разделяют не только адресное пространство, но и открытые файлы, и множество других ресурсов. Процессы же, исполняющиеся параллельно, совместно используют физическую память, диски и другие ресурсы. Нетрудно заметить некую аналогию в работе процессов и потоков. Более того, потоки унаследовали некоторые свойства процессов, из-за чего их довольно часто  называют «упрощенные процессы». В  связи с существованием потоков  появился термин многопоточность. Многопоточносью  называют свойство платформы или  приложения, заключающееся в том, что порожденный в операционной системе процесс может состоять из нескольких потоков, выполняющихся  без предписанного порядка во времени, т.е. параллельно.

Необходимо сделать оговорку, что  многопоточность в различных  системах реализуется не только конкретными API-интерфейсами, но и самими подходами  к ее организации. В рамках данной курсовой работы будет рассматриваться  многопоточность исключительно  в Windows-системах.

Конечно же, один процессор может  исполнять только один поток инструкций, и именно поэтому «подлинная»  многопоточность, когда потоки команд исполняются действительно параллельно  и независимо, в чистом виде практически  нигде не встречается. Как правило, число процессоров значительно  меньше числа потоков в системе. Из-за этого операционной системе  приходится эмулировать параллельную работу процессоров. Такая эмуляция называется псевдопараллелизмом или  псевдомноготочностью. В этом случае потоки инструкций не выполняются параллельно. Время работы процессора разбивается  на небольшие интервалы, которые  называются квантами. Процессор выделяет кванты на каждый поток поочередно (распределение происходит системно, и программист может влиять на это распределение лишь косвенным  образом) и быстро переключается  между потоками, создавая иллюзию  многопоточности. При таких переключениях, выполнение текущего потока приостанавливается, а все содержимое регистров процессора сохраняется в специальной области  памяти. Когда очередь вернется к  этому потоку, содержимое регистров  полностью восстановится и работа когда-то остановленного потока продолжится, словно она и не прерывалась.

Нельзя сказать, что потоки, выполняющиеся  в одном процессе, являются независимыми. Они имеют одно и то же адресное пространство, что допускает возможность  совместного использования глобальных переменных. Любой поток имеет  доступ к любому адресу ячейки памяти в адресном пространстве данного  процесса, а значит, он может стирать, записывать и считывать информацию из стека любого другого потока. Потоки разделяют не только адресное пространство, но и открытые файлы, дочерние процессы, сигналы и т.д., ведь если бы такого разделения данных не было, то это были бы отдельные  самостоятельные процессы. Концепция  потоков заключается в том, чтобы  несколько потоков могли совместно использовать определенный набор ресурсов и достигать поставленную перед ними цель в тесном взаимодействии.

 

2 БИБЛИОТЕКА ПАРАЛЛЕЛЬНЫХ ЗАДАЧ (TPL)

 

Как уже упоминалось ранее, одним  из наиболее важных средств, внедренных в версию 4.0 среды .NET Framework, является библиотека параллельных задач или Task Parallel Library (или TPL). Эта библиотека вносит немало изменений, касающихся параллельного  программирования. Данные изменения  касаются как основ организации  многопоточности в C#, так и «поверхностных»  нововведений, таких как изменение  или введение новых методов, которые  значительно упрощают процесс создания многопоточного приложения.

Очень важно обратить внимание на то, что средства, предоставляемые  библиотекой параллельных задач, не являются полным замещением стандартного механизма реализации многопоточности, а лишь дополняют его. Практически  все стандартные механизмы построения многопоточного приложения (они описаны  в работе Пономарёва А.А) применимы  и к средствам библиотеки TPL.

 

2.1 Основные нововведения TPL

 

Библиотека TPL определена в пространстве имен System.Threading.Tasks.

Следует обратить внимание, что очень  часто в программу включают и  класс System.Threading. Это обусловлено  тем, что использование библиотеки TPL для организации многопоточной  обработки является рекомендуемым, но не обязательным. Построение многопотчного  приложения с использованием класса Thread по-прежнему находит широкое  применение. Более того, библиотека параллельных задач имеет ряд  существенных недостатков, о которых в дальнейшем будет рассказано более подробно. Эти недостатки могут быть устранены стандартными методами организации многопоточности.

 

В основу TPL положен класс Task (определен  в пространстве имен System.Threading.Tasks), и  элементарная единица исполнения инкапсулируется  средствами этого класса, а не класса Thread. Одно из фундаментальных отличий  библиотеки параллельных задач заключается  в том, что класс Task не инкапсулирует  поток исполнения, как это делает класс Thread. Класс Task является абстракцией, представляющей асинхронную операцию, но в некотором роде задача сама по себе напоминает создание потока.

Информация о работе Многопоточные приложения в Visual Studio.NET. Разработка приложения, демонстрирующего многопоточность для одного процессора