Контекст потока windows это

Потоки и работа с ними Threads and threading

Многопоточность позволяет увеличивать скорость реагирования приложения и, если приложение работает в многопроцессорной или многоядерной системе, его пропускную способность. Multithreading allows you to increase the responsiveness of your application and, if your application runs on a multiprocessor or multi-core system, increase its throughput.

Процессы и потоки Processes and threads

Процесс — это исполнение программы. A process is an executing program. Операционная система использует процессы для разделения исполняемых приложений. An operating system uses processes to separate the applications that are being executed. Поток — это основная единица, которой операционная система выделяет время процессора. A thread is the basic unit to which an operating system allocates processor time. Каждый поток имеет приоритет планирования и набор структур, в которых система сохраняет контекст потока, когда выполнение потока приостановлено. Each thread has a scheduling priority and maintains a set of structures the system uses to save the thread context when the thread’s execution is paused. Контекст потока содержит все сведения, позволяющие потоку безболезненно возобновить выполнение, в том числе набор регистров процессора и стек потока. The thread context includes all the information the thread needs to seamlessly resume execution, including the thread’s set of CPU registers and stack. Несколько потоков могут выполняться в контексте процесса. Multiple threads can run in the context of a process. Все потоки процесса используют общий диапазон виртуальных адресов. All threads of a process share its virtual address space. Поток может исполнять любую часть программного кода, включая части, выполняемые в данный момент другим потоком. A thread can execute any part of the program code, including parts currently being executed by another thread.

Платформа .NET Framework предоставляет способ изоляции приложений в процессе с помощью доменов приложений. .NET Framework provides a way to isolate applications within a process with the use of application domains. (Домены приложений недоступны в .NET Core.) Дополнительные сведения см. в разделе Домены приложений и потоки в статье Домены приложений. (Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.

По умолчанию программа .NET запускается с одним потоком, часто называемым основным потоком. By default, a .NET program is started with a single thread, often called the primary thread. Тем не менее она может создавать дополнительные потоки для выполнения кода параллельно или одновременно с основным потоком. However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Эти потоки часто называются рабочими потоками. These threads are often called worker threads.

Цели применения нескольких потоков When to use multiple threads

Используйте несколько потоков, чтобы увеличить скорость реагирования приложения и воспользоваться преимуществами многопроцессорной или многоядерной системы, чтобы увеличить пропускную способность приложения. You use multiple threads to increase the responsiveness of your application and to take advantage of a multiprocessor or multi-core system to increase the application’s throughput.

Представьте себе классическое приложение, в котором основной поток отвечает за элементы пользовательского интерфейса и реагирует на действия пользователя. Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. Используйте рабочие потоки для выполнения длительных операций, которые, в противном случае будут занимать основной поток, в результате чего пользовательский интерфейс будет недоступен. Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. Для более оперативной реакции на входящие сообщения или события также можно использовать выделенный поток связи с сетью или устройством. You can also use a dedicated thread for network or device communication to be more responsive to incoming messages or events.

Если программа выполняет операции, которые могут выполняться параллельно, можно уменьшить общее время выполнения путем выполнения этих операций в отдельных потоках и запуска программы в многопроцессорной или многоядерной системе. If your program performs operations that can be done in parallel, the total execution time can be decreased by performing those operations in separate threads and running the program on a multiprocessor or multi-core system. В такой системе использование многопоточности может увеличить пропускную способность, а также повысить скорость реагирования. On such a system, use of multithreading might increase throughput along with the increased responsiveness.

Как использовать многопоточность в .NET How to use multithreading in .NET

Начиная с .NET Framework 4, для многопоточности рекомендуется использовать библиотеку параллельных задач (TPL) и Parallel LINQ (PLINQ). Starting with .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Дополнительные сведения см. в разделе Параллельное программирование. For more information, see Parallel programming.

Читайте также:  Windows roots system32 ntoskrnl exe

Библиотека параллельных задач и PLINQ полагаются на потоки ThreadPool. Both TPL and PLINQ rely on the ThreadPool threads. Класс System.Threading.ThreadPool предоставляет приложения .NET с пулом рабочих потоков. The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. Также можно использовать потоки из пула потоков. You can also use thread pool threads. Дополнительные сведения см. в разделе Управляемый пул потоков. For more information, see The managed thread pool.

Наконец, можно использовать класс System.Threading.Thread, который представляет управляемый поток. At last, you can use the System.Threading.Thread class that represents a managed thread. Дополнительные сведения см. в разделе Использование потоков и работа с потоками. For more information, see Using threads and threading.

Несколько потоков могут требовать доступ к общему ресурсу. Multiple threads might need to access a shared resource. Чтобы сохранить ресурс в неповрежденном состоянии и избежать состояния гонки, необходимо синхронизировать доступ к нему потоков. To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. Вы также можете координировать взаимодействие нескольких потоков. You also might want to coordinate the interaction of multiple threads. Платформа .NET предоставляет ряд типов для синхронизации доступа к общему ресурсу или координации взаимодействия потоков. .NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Дополнительные сведения см. в разделе Обзор примитивов синхронизации. For more information, see Overview of synchronization primitives.

Исключения следует обрабатывать в потоках. Do handle exceptions in threads. Необработанные исключения в потоках, как правило, приводят к завершению процесса. Unhandled exceptions in threads generally terminate the process. Дополнительные сведения см. в статье Исключения в управляемых потоках. For more information, see Exceptions in managed threads.

1.2 Процесс, контекст процесса и потоки

1.2 Процесс, контекст процесса и потоки

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

В Windows NT несколько процессов могут существовать одновременно; но только один процесс выполняется центральным процессором в определенный момент времени. Обратите внимание: драйверы вообще и драйверы систем хранения данных в частности не создают собственных процессов. Операционная система создает несколько процессов для своих нужд, а также определенные процессы в ответ на пользовательские команды, например когда пользователь запускает приложение, такое, как Microsoft Word или Microsoft Excel. Если драйвер вызывается во время работы процесса, считается, что он работает в контексте вызывающего процесса.

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

Поток – это структурная единица процесса; процесс может содержать один или несколько потоков. Поток совместно использует глобальные структуры данных и адресное пространство процесса, но при этом имеет собственные данные. Переключение между процессами – задача весьма трудоемкая, которая включает в себя сохранение состояния процессора в специальной структуре данных, зависящей от процесса, и-изменение регистров управления памятью и процессором. Переключение между потоками осуществляется намного быстрее, поскольку требует сохранения гораздо меньшего объема данных.

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

Поток может работать в пользовательском режиме и в режиме ядра. Потоки в режиме ядра могут создаваться только структурами, работающими в этом режиме, например драйверами устройств, и они всегда выполняются в режиме ядра. Потоки пользовательского режима обычно выполняются именно в этом режиме, кроме тех случаев, когда это происходит в режиме ядра после запроса к службе Windows NT, как уже отмечалось в разделе 1.1.

Читайте также

Контекст процесса

Контекст процесса Одна из наиболее важных частей процесса— это исполняемый программный код. Этот код считывается из выполняемого файла (executable) и выполняется в адресном пространстве процесса. Обычно выполнение программы осуществляется в пространстве пользователя.

Контекст прерывания

Контекст прерывания При выполнении обработчика прерывания или обработчика нижней половины, ядро находится в контексте прерывания. Вспомним, что контекст процесса — это режим, в котором работает ядро, выполняя работу от имени процесса, например выполнение системного

Контекст рисования

Контекст рисования Рисование на канве выполняется с помощью особых свойств и методов объекта… нет, не HTMLCanvasElement, а CanvasRenderingContext2D. Этот объект представляет так называемый контекст рисования, который можно рассматривать как набор инструментов, используемый для рисования

Читайте также:  Add linux to windows 10 boot manager

Контекст процесса

Контекст процесса Каждый процесс UNIX имеет контекст, под которым понимается вся информация, требуемая для описания процесса. Эта информация сохраняется, когда выполнение процесса приостанавливается, и восстанавливается, когда планировщик предоставляет процессу

2.2.2.1 Контекст процесса

2.2.2.1 Контекст процесса Контекстом процесса является его состояние, определяемое текстом, значениями глобальных переменных пользователя и информационными структурами, значениями используемых машинных регистров, значениями, хранимыми в позиции таблицы процессов и в

6.3 КОНТЕКСТ ПРОЦЕССА

6.3 КОНТЕКСТ ПРОЦЕССА Контекст процесса включает в себя содержимое адресного пространства задачи, выделенного процессу, а также содержимое относящихся к процессу аппаратных регистров и структур данных ядра. С формальной точки зрения, контекст процесса объединяет в себе

Поисковый контекст

Поисковый контекст В случае с запросами из нескольких слов «Яндекс» умеет определять, каким должно быть максимальное расстояние между словами, чтобы страница наиболее точно отвечала запросу. Вы можете задать расстояние явным образом.Слова идут подрядТакой порядок слов

Контекст откровения

Контекст откровения Главное событие, решившее судьбу проекта, случилось 31 июля 2001 г., когда «Яндекс» запустил «Яндекс. Директ» — систему автоматического (в режиме онлайн) размещения контекстной рекламы с оплатой по кликам. Контекстная реклама по сей день остается

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

Контекст устройства CancelDC Функция CancelDC отменяет любую незаконченную операцию на указанном контексте устройства. BOOL CancelDC ( HDC hdc // дескриптор контекста устройства ); Параметры hdc — идентифицирует контекст устройства. Возвращаемые значения В случае успеха возвращается

Контекст транзакции

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

Логический контекст

Логический контекст Простой способ рассматривать транзакцию между START TRANSACTION и COMMIT или ROLLBACK — это смотреть на нее как на серию клиентских операций и взаимодействий клиента и сервера, которые точно отображают задачу. Это очень полезная модель для понимания того, как

1.2.1 Графический контекст

1.2.1 Графический контекст Прежде чем начать работу с графикой, программа должна выделить себе специальную структуру данных и получить указатель на нее. Эта структура называется графическим контекстом (Graphic Context (GC)). Указатель на GC используется в качестве одного из

Контекст преобразования

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

Контекст потока, переключение контекстов

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

· программный счетчик, регистр состояния и содержимое остальных регистров процессора;

· указатели на стек ядра и пользовательский стек;

· указатели на адресное пространство, в котором выполняется поток (каталог таблиц страниц процесса).

Эта информация сохраняется в текущем стеке ядра потока.

Контекст отражает состояние регистров процессора на момент последнего исполнения потока и хранится в структуре CONTEXT, определенной в заголовочном файле WinNT.h. Элементы этой структуры соответствуют регистрам процессора, например, для процессоров x86 процессоров в ее состав входят Eax, Ebx, Ecx, Edx и т д.. Win32-функция GetThreadContext позволяет получить текущее состояние контекста, а функция SetThreadContext — задать новое содержимое контекста. Перед этой операцией поток рекомендуется приостановить.

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

Заключение

В лекции проанализированы функции CreateProcess и CreateThread и этапы создания процессов и потоков. Важными характеристиками потока являются его контекст и состояние.

Лекция 10 Планирование потоков.

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

Введение

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

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

Процедура планирования обычно связана с весьма затратной процедурой диспетчеризации — переключением процессора на новый поток, поэтому планировщик должен заботиться об эффективном использовании процессора. Принадлежность потоков к процессу при планировании не учитывается, то есть единицей планирования в ОС Windows является именно поток. Запуск процедуры планирования удобно проиллюстрировать на упрощенной (по сравнению с диаграммой, изображенной на рис. 5.3) диаграмме состояний потока, см. рис. 6.1.

Читайте также:  Служба медик центра обновления windows

Рис. 6.1. Упрощенная диаграмма состояний потоков в ОС Windows

Наиболее важным вопросом планирования является выбор момента для принятия решения. В ОС Windows запуск процедуры планирования вызывается одним из следующих событий.

Это, во-первых, события, связанные с освобождением процессора.

(1) Завершение потока

(2) Переход потока в состояние готовности в связи с тем, что его квант времени истек

(3) Переход потока в состояние ожидания

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

(4) Поток вышел из состояния ожидания

(5) Поток только что создан

(6) Деятельность текущего потока может иметь следствием вывод другого потока из состояния ожидания.

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

Наконец, процедура планирования может быть запущена, если изменяется приоритет потока в результате вызова системного сервиса или самой Windows, а также если изменяется привязка (affinity) потока к процессору, из-за чего поток не может больше выполняться на текущем процессоре.

Заметим, что переключение из пользовательского режима в режим ядра (и обратно) не влияет на планирование потока, так как контекст в этом случае не меняется.

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

Перевод потока из состояния ожидания в состояние готовности (вариант 4) может быть следствием прерывания, свидетельствующим об окончании операции ввода-вывода. В этом случае процедура планирования может быть отложена (deffered procedure call) до окончания выполнения высокоприоритетного системного кода.

Иногда подобный переход происходит в результате деятельности другого потока, который, например, выполнил операцию up на семафоре (пример 6-го варианта). Хотя этот другой поток и может продолжить работу, он должен запустить процедуру планирования, поскольку в очереди готовности могут оказаться потоки с более высоким приоритетом. По тем же причинам планирование осуществляется в случае запуска нового потока.

Алгоритмы планирования

Приоритеты

В ОС Windows реализовано вытесняющее приоритетное планирование, когда каждому потоку присваивается определенное числовое значение — приоритет, в соответствии с которым ему выделяется процессор. Потоки с одинаковыми приоритетами планируются согласно алгоритму Round Robin (карусель). Важным достоинством системы является возможность вытеснения потоков, работающих в режиме ядра — код исполнительной системы полностью реентерабелен. Не вытесняются лишь потоки, удерживающие спин-блокировку (см. лекцию «Синхронизация потоков»). Поэтому спин-блокировки используются с большой осторожностью и устанавливаются на минимальное время.

В системе предусмотрено 32 уровня приоритетов. Шестнадцать значений приоритетов (16-31) соответствуют группе приоритетов реального времени, пятнадцать значений (1-15) предназначены для обычных потоков, и значение 0 зарезервировано для системного потока обнуления страниц (см. рис. 6.2).

Рис. 6.2. Приоритеты потоков

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

· реального времени ( REALTIME_PRIORITY_CLASS ),

· выше нормы ( ABOVE_NORMAL_PRIORITY_CLASS ),

· ниже нормы ( BELOW_NORMAL_PRIORITY_CLASS )

· и неработающий ( IDLE_PRIORITY_CLASS ).

Относительный приоритет потока устанавливается аналогичными параметрами функции SetThreadPriority:

Совокупность из шести классов приоритетов процессов и семи классов приоритетов потоков образует 42 возможные комбинации и позволяет сформировать так называемый базовый приоритет потока (см. таб. 6.1).

Таблица 6.1. Формирование базового приоритета потока из класса приоритета процесса и относительного приоритета потока

Приоритеты потоков
Классы приоритетов процессов Критичный ко времени Самый высокий Выше нормы Нормальный Ниже нормы Самый низкий Неработающий
Неработающий
Ниже нормы
Нормальный
Выше нормы
Высокий
Реального времени

Базовый приоритет процесса и первичного потока по умолчанию равен значению из середины диапазонов приоритетов процессов (24, 13, 10, 8, 6 или 4). Смена приоритета процесса влечет за собой смену приоритетов всех его потоков, при этом их относительные приоритеты остаются без изменений.

Приоритеты с 16 по 31 в действительности приоритетами реального времени не являются, поскольку в рамках поддержки мягкого реального времени, которая реализована в ОС Windows, никаких гарантий относительно сроков выполнения потоков не дается. Это просто более высокие приоритеты, которые зарезервированы для системных потоков и тех потоков, которым такой приоритет дает пользователь с административными правами. Тем не менее, наличие приоритетов реального времени, а также вытесняемость кода ядра, локализация страниц памяти (см. лекцию 10) и ряд дополнительных возможностей — все это позволяет выполнять в среде ОС Windows приложения мягкого реального времени, например, мультимедийные. Системный поток с нулевым приоритетом занимается обнулением страниц памяти. Обычные пользовательские потоки могут иметь приоритеты от 1 до 15.

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой.

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

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

Оцените статью