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

21. Средства распараллеливания вычислений в ос Windows. Понятия процесса и потока. Создание и завершение потока. Приостановка и возобновление потока. Контекст потока.

Многозада́чность — свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов.

Существует 2 типа многозадачности:

  • Процессная многозадачность

  • Поточная многозадачность 

Процес – выполняемая программа, которая имеет свое виртуальное адресное пространство, выполняемый код, указатели на объекты ядра, данные, уникальный идентификатор, как минимум один выполняющий поток.

Аварийное завершение процесса не приводит к утечке ресурсов или нарушению целостности данных в других процессах. Однако, поскольку процессы работают в разных адресных пространствах, необходимо использовать средства Inter-Process Communication (IPC) для доступа к общим данным.

Поток – выполняемая подпрограмма процесса, разделяющая с другими потоками общие ресурсы процесса. Все потоки процесса разделяют его вирт. Адресное пространство и системные ресурсы. Каждый поток имеет свой уникальный идентификатор. Расход памяти при распараллеливании минимален. Основные расходы памяти связаны с организацией стека на каждый параллельный поток. Производительность при работе с общими данными максимальна, поскольку потоки работают в общем адресном пространстве. Однако аварийное завершение потока часто приводит к утечке памяти процесса или даже к аварийному завершению процесса. Из-за общей памяти, целостность общих данных может быть нарушена.

Контекст потока - структура, создаваемая Windows для каждого потока. Она содержин информацию о состоянии потока.

Создание и завершение потока производится следующим системным вызовом:

HANDLE CreateThread( SECURITY_ATTRIBUTES* lpThreadAttributes, SIZE_T dwStackSize, THREAD_START_ROUTINE* lpStartAddress, void* lpParameter, DWORD dwCreationFlags, DWORD* lpThreadId);

DWORD WINAPI ThreadProc(void* lpParameter);

Завершение потока:

void ExitThread(DWORD dwExitCode);

22. Понятие пула потоков. Архитектура пула потоков. Операции с потоками при работе с пулом потоков.

Архитектура пула потоков:

Рабочие потоки (worker threads) вызывают callback-функции.

Ожидающие потоки ждут на объектах ожидания (wait handles).

Очередь рабочих потоков (work queue).

Стандартный пул потоков на каждый процесс.

Менеджер рабочих потоков (worker factory).

Стандартный размер пула потоков – 500 рабочих потоков.

Pooled Threads: Improve Scalability With New Thread Pool APIs

Thread Pooling

Thread Pool API

Класс ThreadPool обеспечивает приложение пулом рабочих потоков, управляемых системой, позволяя пользователю сосредоточиться на выполнении задач приложения, а не на управлении потоками. Если имеются небольшие задачи, которые требуют фоновой обработки, пул управляемых потоков — это самый простой способ воспользоваться преимуществами нескольких потоков. Например, начиная с .NET Framework 4, можно создавать объекты Task и Task<TResult>, выполняющие асинхронные задачи в потоках из пула потоков.

Пропуск проверок безопасности

Пул потоков также предоставляет методы ThreadPool.UnsafeQueueUserWorkItem и ThreadPool.UnsafeRegisterWaitForSingleObject. Используйте эти методы, только когда есть уверенность, что стек вызывающего объекта не зависит от проверок безопасности, выполненных во время выполнения задачи в очереди. Обе перегрузки, QueueUserWorkItem и RegisterWaitForSingleObject, перехватывают стек вызывающего объекта, который объединяется со стеком потока из пула потоков, когда поток начинает выполнять задачу. Если требуется проверка безопасности, проверяется весь стек. Несмотря на обеспечение безопасности, такая проверка влияет также на производительность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]