
- •1. Сборщик мусора и управление ресурсами
- •2. Жизненный цикл объектов
- •3. Неуправляемый код и указатели
- •4. Строки и строковый пул
- •5. Обобщенные типы, ограничения в параметрах обобщенных типов, типы допускающие null значение
- •6. Тип Type и пространство System.Reflection
- •7. Создание объектов с помощью рефлексии, вызов методов объектов средствами рефлексии
- •8. Атрибуты, жизненный цикл объекта атрибута
- •9. Специальные атрибуты net.Framework и ограничения пользовательских атрибутов
- •10. Метаданные сборок, структура сборок, домены приложений
- •11. Многопоточное программирование. Виды многопоточности, обеспечение многопоточности в net.Framework, виды блокировки
- •12. Класс Thread, логические и физические потоки выполнения, жизненный цикл потока выполнения
- •13. Класс монитора, конструкция lock()
- •14. Атомарная синхронизация и класс Interlocked
- •15. Класс ReaderWriterLock, пул потоков
- •16. Классы WaitHandle и производные от него: ManualResetEvent, AutoResetEvent, Mutex
- •17. Высокоуровневые средства распараллеливания задач, класс Task
- •18. Свойства и методы класса Task
- •19. Делегаты, цепочка вызова
- •Групповая адресация
- •20. Асинхронный вызов с помощью объекта делегата
- •IAsyncResult
- •21. События, обратный вызов, типовая схема реализации события
- •22. Лямбда-выражения, замыкание лямбда-выражений
- •23. Деревья выражений, типы деревьев. Создание деревьев выражений
- •24. Технология ado.Net, архитектура, модель с постоянным соединением и с рассоединением
- •Linq to DataSet
- •Linq to sql
- •Платформа ado.Net Entity Framework
- •Службы wcf Data Services
- •25)Понятие поставщика данных и его составные части в ado.Net. Класс соединения, итератора, команды.
- •26. Технология объектно-реляционного связывания, персистентные объекты, на примере одной из технологии (Linq to sql, Linq to Entities, nHibernate)
- •Entity Framework
- •27. Linq to Objects: архитектура технологии и возможности, понятие итератора, создание Linq запросов
- •28. Средства распараллеливания выполнения запросов plinq.
- •29. Основы wcf. Основные понятия, применение. Контракты данных, привязки. Архитектура сервис-ориентированных систем.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •30. Структура проекта с использованием wcf сервисов. Интерфейсы сервиса, атрибуты для обозначения методов сервиса и контрактов данных.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •31. Методы и свойства прокси-объекта на стороне клиента.
- •32. Развертывание wcf сервисов.
12. Класс Thread, логические и физические потоки выполнения, жизненный цикл потока выполнения
Для создания потоков и управления ими в .NET предназначен класс Thread, определенный в пространстве имен System.Threading.
Концептуально потоки NET делятся на физические и логические. Физические потоки NET опираются на потоки, реализованные базовой платформой. Логические потоки эмулируются средой .NET без опоры на базовую платформу. Концепций логических потоков была введена в NET на случай распространения на платформах, не поддерживающих многолоточность. В Win32 используются только физические потоки.
Таким образом, можно сказать, что главный поток приложения .NET по умолчанию не синхронизирован с другими потоками. Основные потоки могут продолжать выполняться и после завершения главного потока, а фоновые будут принудительно остановлены в момент его завершения.
Создание нового объекта Thread приводит к созданию нового управляемого потока. Класс Thread имеет конструкторы, которые принимают делегат ThreadStart или делегат ParameterizedThreadStart; этот делегат служит оболочкой для метода, который был вызван новым потоком при вызове пользователем метода Start. Неоднократный вызов перегрузки Start приводит к созданию исключения ThreadStateException.
Метод Start возвращается немедленно, как правило до фактического запуска нового потока. Можно использовать свойства ThreadState и IsAlive для определения состояния потока в любой момент, однако эти свойства никогда не должны использоваться для синхронизации действий потоков.
Thread InstanceCaller = new Thread(new ThreadStart(myObject.Method));
InstanceCaller.Start();
В .NET Framework версии 2.0 делегат ParameterizedThreadStart предоставляет простой способ передачи объекта, содержащего данные, в поток при вызове перегрузки метода Thread.Start. Пример кода см. в разделеParameterizedThreadStart.
Использование делегата ParameterizedThreadStart не является типобезопасным способом передачи данных, так как перегрузка метода Thread.Start принимает любой объект. Альтернативой является инкапсуляция процедуры потока и данных во вспомогательном классе и использование делегата ThreadStart для выполнения процедуры потока.
Всего различают две разновидности многозадачности: на основе процессов и на основе потоков. Отличия многозадачности на основе процессов и потоков сводится к следующему: многозадачность на основе процессов организуется для параллельного выполнения программ, а многозадачность на основе потоков - для параллельного выполнения отдельных частей одной программы. В .NET Framework поддерживаются обе разновидности многозадачности: на основе процессов и на основе потоков. Поэтому можно создавать как процессы, так и потоки, а также управлять и теми и другими.
Класс Thread
Класс Thread является самым элементарным из всех типов пространства имен System.Threading. Основные свойства и методы класса Thread приведены в таблице ниже.
Таблица 4.1. Основные свойства и методы класса Thread |
|
Имя |
Описание |
CurrentContext |
Это свойство только для чтения возвращает контекст, в котором в данный момент выполняется поток |
CurrentThread |
Это свойство только для чтения возвращает ссылку на текущий выполняемый поток |
GetDomain(), GetDomainID() |
Этот метод возвращает ссылку на текущий AppDomain или идентификатор этого домена, в котором выполняется текущий поток |
Sleep() |
Этот метод приостанавливает текущий поток на заданное время |
IsAlive |
Возвращает булевское значение, указывающее на то, запущен ли поток (и еще не прерван и не отменен) |
IsBackground |
Получает или устанавливает значение, указывающее, является ли данный поток "фоновым" (подробнее объясняется далее) |
Name |
Позволяет вам установить дружественное текстовое имя потока |
Priority |
Получает или устанавливает приоритет потока, который может принимать значение из перечисления ThreadPriority |
ThreadState |
Получает состояние данного потока, которому может быть присвоено значение из перечисления ThreadState |
Abort() |
Инструктирует CLR прервать поток, как только это будет возможно |
Interrupt() |
Прерывает (т.е. приостанавливает) текущий поток на заданный период ожидания |
Join() |
Блокирует вызывающий поток до тех пор, пока указанный поток (тот, для которого вызван Join()) не завершится |
Resume() |
Возобновляет ранее приостановленный поток |
Start() |
Инструктирует CLR запустить поток как можно скорее |
Suspend() |
Приостанавливает поток. Если поток уже приостановлен, вызов Suspend() не дает эффекта |
|
|