Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы 1 и 2 на С#.docx
Скачиваний:
165
Добавлен:
11.04.2015
Размер:
253.02 Кб
Скачать

Лабораторная работа № 1. Введение в многопоточность. Многопоточность в c# .Net.

Одной из очень важных особенностей языка C# является то, что он имеет встроенную поддержку многопоточного программирования. Особенность многопоточной программы является то, что она может состоять из нескольких частей, каждая из которых выполняет свою часть поставленной задачи. Таким образом, части выполняются параллельно. Такая часть программы называется потоком. Среда .NET Framework, в свою очередь, содержит ряд классов, предназначенный для гибкой реализации многопоточных приложений. Причем, в отличии от других языков программирования, имевших слабые места или подводные камни , встречавшиеся в процессе создания многопоточных приложений, C# , в силу своей встроенной поддержки многопоточности, позволяет полностью ликвидировать эти проблемы, или , в худшем случае, свести их к минимуму.

Многопоточность может быть ориентированная на потоки и процессы. Здесь важно понимать разницу, так как процесс, по сути является отдельно выполняемой программной. Т.е. здесь многопоточность основана на том, что выполняются две и более программы.

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

Потоки могут как выполняться, так и ожидать выполнения, быть временно приостановленными (после чего возобновленными) , заблокированными. Так же поток может просто завершиться. Все это – возможные состояния потока.

Многопоточность в среде .NET Framework реализована следующим образом: существуют два типа потоков: высокоприоритетный и низкоприоритетный. Высокоприоритетный(foreground) поток в отличии от низкоприоритетного (или фонового - background), назначается, как тип потока по умолчанию, а так же не будет остановлен, в том случае, если все высокоприоритетные потоки к его процессе будут остановлены.

Умение написания многопоточных программ, сводиться к тому, что бы уметь эффективно разработать объектную модель программы, которая будет использовать в ходе решения задачи несколько отдельных потоков, а так же координировать работу этих потоков между собой. Такая координация работы потоков называется синхронизацией потоков. По сути, синхронизация – это специальное средство, оснащенное собственной подсистемой методов, и являющейся одной из главных составляющих многопоточного программирования. В C#, классы, отвечающие за поддержку многопоточного программирования, определены в пространстве имен System.Threading.