 
        
        - •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() не дает эффекта | 
| 
 | 
 | 
