Взаимосвязь процессов, доменов приложений, контекстов и потоков

Взаимосвязь процессов, доменов приложений, контекстов и потоков

В предыдущей главе обсуждалось понятие потока, который был определен, как путь исполнения в рамках выполняемого приложения. И хотя многие приложения .NET имеют только один поток и, тем не менее, оказываются очень полезными, первичный поток компоновочного блока (порождаемый средой CLR при выполнении Main()) может создавать вторичные потоки для решения дополнительных задач. Реализуя дополнительные потоки, вы можете строить приложения с лучшим откликом на действия пользователя (но не обязательно более быстро выполняющие свои задачи).

Пространство имен System.Threading содержит различные типы, позволяющие создавать многопоточные приложения. Основным типом здесь можно считать класс Thread, поскольку он представляет данный поток. Чтобы программно получить ссылку на поток, выполняющий данный член в текущий момент, просто вызовите статическое свойство Thread.CurrentThread.

private static void ExtractExecutingThread() {

 // Получение потока, выполняющего

 // в данный момент данный метод.

Thread currThread = Thread.CurrentThread;

}

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

Но, хотя активные потоки могут перемещаться через границы доменов приложения, в любой конкретный момент времени один конкретный поток может выполняться в рамках только одного домена приложения (другими словами, один поток не может работать в нескольких доменах приложения одновременно). Чтобы программно получить доступ к домену приложения, содержащему текущий поток, следует вызвать статический метод Thread.GetDomain().

private static void ExtractAppDomainHostingThread() {

 // Получение домена приложения, содержащего текущий поток.

 AppDomain ad = Thread.GetDomain();

}

Любой поток в любой момент времени также может быть перемещен средой CLR в любой из имеющихся контекстов или помещен в новый контекст. Чтобы получить текущий контекст, в рамках которого оказался поток, используйте статическое свойство Thread.CurrentContext.

private static void ExtractCurrentThreadContext() {

 // Получение контекста, в рамках которого

 // действует текущий поток.

Context ctx = Thread.CurrentContext;

}

Снова подчеркнем, что именно среда CLR является тем объектом, который отвечает за помещение потоков в соответствующие домены приложения и контексты. Как разработчик приложений .NET, вы обычно остаетесь в блаженном неведении относительно того, где заканчивается данный поток (или, точнее, когда он помещается в новые границы). Однако вам будет полезно знать различные способы получения соответствующих примитивов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

7.3.4. Взаимосвязь между производственным процессом проекта и планом разработки ПО

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

7.3.4. Взаимосвязь между производственным процессом проекта и планом разработки ПО Описание производственного процесса проекта бывает, как правило, недостаточно конкретным для непосредственного выполнения. Хотя описание обычно определяет такие понятия, как роли (т. е.


3.5. Взаимосвязь классов и объектов.

Из книги Объектно-ориентированный анализ и проектирование с примерами приложений на С++ автора Буч Гради

3.5. Взаимосвязь классов и объектов. Отношения между классами и объектами Классы и объекты - это отдельные, но тесно связанные понятия. В частности, каждый объект является экземпляром какого-либо класса; класс может порождать любое число объектов. В большинстве


Обработчики завершения: завершение процессов и потоков

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Обработчики завершения: завершение процессов и потоков Обработчики завершения не выполняются, если выполнение процесса или потока было прекращено независимо от того, было ли это инициировано самим процессом путем использования функций ExitProcess или ExitThread, или вызвано


Приоритеты процессов и потоков и планирование выполнения

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Приоритеты процессов и потоков и планирование выполнения Ядро Windows всегда запускает тот из потоков, готовых к выполнению, который обладает наивысшим приоритетом. Поток не является готовым к выполнению, если он находится в состоянии ожидания, приостановлен или


Предостережение относительно использования приоритетов потоков и процессов

Из книги 1С: Бухгалтерия 8.2. Понятный самоучитель для начинающих автора Гладкий Алексей Анатольевич

Предостережение относительно использования приоритетов потоков и процессов Высокими приоритетами потоков и высокими классами приоритета процессов необходимо пользоваться с осторожностью. Следует решительно избегать использования приоритетов реального времени для


Создание переносимых приложений с использованием потоков Pthreads

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Создание переносимых приложений с использованием потоков Pthreads Потоки Pthreads уже неоднократно упоминались нами в качестве альтернативной модели многопоточного программирования и синхронизации, доступной в UNIX, Linux и других системах, не принадлежащих семейству Windows.


Стеки потоков и допустимые количества потоков

Из книги C++ для начинающих автора Липпман Стенли

Стеки потоков и допустимые количества потоков Следует сделать еще два предостережения. Во-первых, подумайте о размере стека, который по умолчанию составляет 1 Мбайт. В большинстве случаев этого будет вполне достаточно, но если существуют какие-либо сомнения на сей счет,


5.23 Взаимосвязь имен и адресов

Из книги Домены. Все, что нужно знать о ключевом элементе Интернета автора Венедюхин Александр

5.23 Взаимосвязь имен и адресов Посмотрев на имя системы (fermat.math.yale.edu) и ее IP-адрес в нотации с точками (128.36.23.3), можно подумать, что части имени соответствуют номерам в нотации с точками. Однако на самом деле между ними нет никакой связи.Действительно, иногда системам


4.6. Сравнение процессов и потоков

Из книги автора

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


Б.4. Взаимосвязь с библиотечными функциями ввода-вывода

Из книги автора

Б.4. Взаимосвязь с библиотечными функциями ввода-вывода Выше уже говорилось о том. что функции ввода-вывода стандартной библиотеки языка С реализованы на основе низкоуровневых функций. Иногда удобнее работать с одними, иногда — с другими.Если файл был открыт с помощью


3.9.2. Взаимосвязь массивов и указателей

Из книги автора

3.9.2. Взаимосвязь массивов и указателей Если мы имеем определение массива:int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };то что означает простое указание его имени в программе?ia;Использование идентификатора массива в программе эквивалентно указанию адреса его первого элемента:ia;ia[0]Аналогично


Права и уровни доменов

Из книги автора

Права и уровни доменов Доменов в Интернете очень много. Особое значение имеют домены первого уровня, среди которых принято особо выделять домены общего назначения (или, как их иногда называли раньше, домены общего пользования) и национальные. Например, к доменам общего


Тысячи доменов

Из книги автора

Тысячи доменов Сколько имен внутри домена первого уровня может находиться под контролем одного администратора? Пять? Десять? Пределы определяются только правилами регистрации, действующими внутри домена. Например, в некоторых национальных доменах на число имен,