Поделиться через


Потоки и процессы

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

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

Существование нескольких процессов позволяет компьютеру "одновременно" выполнять несколько задач. Существование нескольких потоков позволяет процессу разделять работу для параллельного выполнения. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. Это позволяет выполнять реально параллельную работу.

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

Отладчик Visual Studio предоставляет мощные, но простые в использовании средства отладки потоков и процессов.

Средства отладки потоков и процессов в Visual Studio

Основные средства для работы с процессами в Visual Studio — это диалоговое окно Присоединение к процессу, окно Процессы и панель инструментов Место отладки. Основные средства для отладки потоков — это окно Потоки, маркеры потоков в окнах исходного кода и панель инструментов Место отладки.

Основные средства для отладки многопоточных приложений — это окна Параллельные стеки и Параллельные задачи.

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

Пользовательский интерфейс

Доступные сведения

Действия, которые можно выполнять

Диалоговое окно Присоединение к процессу

Доступные процессы для присоединения:

  • Имя процесса (EXE)

  • Идентификатор процесса

  • Название строки меню

  • Тип (Управляемый код (версия 4); Управляемый код (версии 2.0, 1.1, 1.0); x86; x64; IA64)

  • Имя пользователя (имя учетной записи)

  • Номер сеанса

Выберите процесс для присоединения

Выберите удаленный компьютер

Измените тип транспортного протокола для подключения к удаленным компьютерам

Окно Процессы

Присоединенные процессы:

  • Имя процесса

  • Идентификатор процесса

  • Путь к процессу EXE

  • Название строки меню

  • Состояние (Прерывание. Работа)

  • Отладка (машинный код, управляемый код и т.д.)

  • Тип транспортного протокола (по умолчанию используется машинный без проверки подлинности)

  • Квалификатор транспортного протокола (удаленный компьютер)

Средства:

  • Attach

  • Отсоединить

  • Завершить

Контекстное меню:

  • Присоединиться

  • Отсоединить

  • Отсоединить, когда отладка остановлена

  • Завершить

Окно Потоки

Потоки текущего процесса:

  • Идентификатор потока

  • Управляемый ИД

  • Категория (основной поток, поток интерфейса, обработчик вызова удаленной процедуры или рабочий поток)

  • Имя потока

  • Место, где создан поток

  • Приоритет

  • Маска сходства

  • Приостановленный счетчик

  • Имя процесса

  • Индикатор флага

  • Приостановленный индикатор

Средства:

  • Поиск

  • Поиск в стеке вызовов

  • Отметить только мой код

  • Пометить выбранные пользовательские модули

  • Группировать по

  • Столбцы

  • Развернуть/Свернуть стеки вызовов

  • Развернуть/Свернуть группы

  • Заморозить/Разморозить потоки

Контекстное меню:

  • Показать потоки в исходном коде

  • Переключиться в поток

  • Заморозить выполняющийся поток

  • Разморозить замороженный поток

  • Пометить поток для дополнительного изучения

  • Снять отметку потока

  • Переименовать поток

  • Отобразить и скрыть потоки

Другие действия:

  • Просмотреть стек вызовов потока в совете

Окна исходного кода.

Индикаторы потока в левом поле указывают один или несколько потоков (по умолчанию отключено, включается с помощью контекстного меню в окне Потоки)

Контекстное меню:

  • Переключиться в поток

  • Пометить поток для дополнительного изучения

  • Снять отметку потока

Панель инструментов Место отладки

  • Текущий процесс

  • Текущий поток

  • Текущий кадр стека

  • Переключиться в другой процесс

  • Переключиться в другой поток в текущем процессе

  • Переключиться в другой кадр стека в текущем потоке

  • Пометить текущие потоки или снять с них отметку

  • Показывать только отмеченные потоки

Окно Параллельные стеки

  • Стеки вызовов для нескольких потоков в одном окне

  • Активный кадр стека для каждого потока

  • Вызывающие и вызываемые функции и процедуры для любого метода

  • Отфильтровать указанные потоки

  • Переключиться в представление "Параллельные задачи"

  • Пометить поток или снять с него отметку

  • Масштаб

Окно Параллельные задачи

  • Просмотр сведений об объектах Task, включая идентификатор задачи, состояние задачи (запланирована, запущена, находится в ожидании, заблокирована), а также сведений о потоке, назначенном задаче

  • Текущее расположение в стеке вызовов

  • Делегат, переданный задаче во время создания

  • Переключиться на текущую задачу

  • Пометить задачу или снять с нее отметку

  • Заморозить или разморозить задачу

См. также

Задачи

Практическое руководство. Использование окна процессов

Другие ресурсы

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

Отладка многопоточных приложений