Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поток — это последовательность инструкций, которым операционная система предоставляет время процессора. Каждый процесс, выполняющийся в операционной системе, состоит по крайней мере из одного потока. Процессы с несколькими потоками называются многопоточных.
Компьютеры с несколькими процессорами, многоядерными процессорами или процессами гиперпоточности могут выполнять несколько одновременных потоков. Параллельная обработка с помощью множества потоков может значительно повысить производительность программы, но это также может сделать отладку более сложной, так как вы отслеживаете много потоков.
Идеальная параллельная обработка не всегда возможна. Иногда потоки должны быть синхронизированы. Одному потоку может потребоваться ждать результата из другого потока, или одному потоку может потребоваться монопольный доступ к ресурсу, который использует другой поток. Проблемы синхронизации являются распространенными причинами ошибок в многопоточных приложениях. Иногда потоки могут в конечном итоге ожидать ресурса, который никогда не становится доступным. Это приводит к тому, что условие называется взаимоблокировкой.
Потоки и процессы
Потоки и процессы связаны с понятиями в компьютерной науке. Оба представляют последовательности инструкций, которые должны выполняться в определенном порядке. Однако инструкции в отдельных потоках или процессах могут выполняться параллельно.
Процессы существуют в операционной системе и соответствуют тому, что пользователи видят как программы или приложения. С другой стороны, поток существует в процессе. По этой причине потоки иногда называются легковесными процессами. Каждый процесс состоит из одного или нескольких потоков.
Существование нескольких процессов позволяет компьютеру выполнять несколько задач одновременно. Существование нескольких потоков позволяет процессу параллельно выполнять отдельные работы. На компьютере с мультипроцессорами процессы или потоки могут выполняться на разных процессорах. Это позволяет выполнять параллельную обработку.
Средства отладки многопоточных приложений
Visual Studio предоставляет различные средства для отладки многопоточных приложений.
Для потоков основными средствами отладки потоков являются окно Параллельных стеков , окно "Параллельные контрольные данные", маркеры потоков в исходных окнах, окно "Потоки " и панель инструментов "Расположение отладки ". Сведения о представлении "Потоки " в параллельных стеках см. в статье "Отладка взаимоблокировки" с помощью представления "Потоки". Сведения об использовании окон Параллельных стеков и параллельных контрольных значений см. в статье "Начало отладки многопоточного приложения". В статье о начале работы показано, как использовать маркеры потока. Кроме того, см . пошаговое руководство. Отладка приложения C++ AMP.
Для кода .NET, использующего асинхронный режим, основные средства отладки — это представление "Задачи " в окне Параллельных стеков . Сведения о начале работы см. в статье Отладка асинхронного приложения (.NET).
Для потоков основными средствами отладки потоков являются окно Параллельных стеков , окно "Параллельные контрольные данные", маркеры потоков в исходных окнах, окно "Потоки " и панель инструментов "Расположение отладки ". Дополнительные сведения о представлении потоков в параллельных стеках см. в разделе "Просмотр потоков и задач" в окне Параллельных стеков. Сведения об использовании окон Параллельных стеков и параллельных контрольных значений см. в статье "Начало отладки многопоточного приложения". В статье о начале работы показано, как использовать маркеры потока. Кроме того, см . пошаговое руководство. Отладка приложения C++ AMP.
Для кода .NET, использующего асинхронный режим, основные средства отладки — это представление "Задачи " в окне Параллельных стеков . Дополнительные сведения см. в статье о просмотре потоков и задач в окне "Параллельные стеки".
Для отладки потоков на GPU основное средство — это окно потоков GPU . См. практическое руководство. Использование окна потоков GPU.
Для процессов основными инструментами являются диалоговое окно "Присоединение к процессу ", окно "Процессы " и панель инструментов "Расположение отладки ".
Visual Studio также предоставляет мощные точки останова и точки трассировки, которые могут быть полезны при отладке многопоточных приложений. Используйте условия и фильтры точек останова для размещения точек останова в отдельных потоках. Точки трассировки позволяют отслеживать выполнение программы без нарушения работы, чтобы изучить такие проблемы, как взаимоблокировки. Дополнительные сведения см. в разделе "Действия точки останова" и "Точки трассировки".
Отладка многопоточного приложения с пользовательским интерфейсом может быть особенно сложной. Вы можете рассмотреть возможность запуска приложения на втором компьютере и удаленной отладки. Дополнительные сведения см. в разделе "Удаленная отладка".
В следующей таблице показаны доступные сведения и действия, которые можно выполнить в каждом из этих мест:
Пользовательский интерфейс | Доступные сведения | Действия, которые можно выполнить |
---|---|---|
Диалоговое окно "Присоединение к процессу" | Доступные процессы, к которому можно присоединиться: — Имя процесса (.exe) — Номер идентификатора процесса - Заголовок панели меню — Тип (Managed v4.0; Управляемые версии 2.0, v1.1, v1.0; x86; x64; IA64) — Имя пользователя (имя учетной записи) — номер сеанса |
Выбор процесса для присоединения к Выбор удаленного компьютера Изменение типа транспорта для подключения к удаленным компьютерам |
Окно процессов | Присоединенные процессы: — Имя процесса — Номер идентификатора процесса — Путь к обработке .exe - Заголовок панели меню - Состояние (разрыв. Выполнение) — отладка (собственный, управляемый и т. д.) — тип транспорта (по умолчанию, собственный без проверки подлинности) — Квалификатор транспорта (удаленный компьютер) |
Инструменты: -Прикреплять -Отделять -Кончать Контекстное меню: -Прикреплять -Отделять — отсоединение при остановке отладки -Кончать |
Панель инструментов "Расположение отладки" | - Текущий процесс — Приостановка приложения — Возобновление работы приложения — Приостановка и завершение работы приложения — текущий поток — Переключение текущего состояния флага потока — Показывать только помеченные потоки — Отображение только текущего процесса — Текущий кадр стека |
— Переключение на другой процесс — Приостановка, возобновление работы или завершение работы приложения — Переключение на другой поток в текущем процессе — переключение на другой кадр стека в текущем потоке — флаг или неflag current threads — Показывать только помеченные потоки — Отображение только текущего процесса |
Окно параллельных стеков | — стеки вызовов для нескольких потоков в одном окне. — Активный кадр стека для каждого потока. — вызывающие и вызываемые методы. — обнаружение взаимоблокировок |
— фильтрация указанных потоков — фильтрация внешних стеков кода — переключение на представление "Задачи" — флаг или отмена задержки потока -Увеличить — копирование кадров стека — Сохранение и экспорт всех стеков в виде изображения |
Окно параллельных контрольных значений | — Столбец флага, в котором можно пометить поток, к которому нужно обратить особое внимание. — Столбец кадра, в котором стрелка указывает выбранный кадр. — настраиваемый столбец, который может отображать компьютер, процесс, плитку, задачу и поток. |
— флаг или отмена задержки потока — Отображение только помеченных потоков — переключение кадров — Сортировка столбца — групповые потоки - Заморозить или отморозить потоки — экспорт данных в окне параллельных контрольных значений |
Окно потоков | Потоки в текущем процессе: — идентификатор потока. — Управляемый идентификатор — Категория (основной поток, поток интерфейса, обработчик вызовов удаленной процедуры или рабочий поток) — Имя потока — расположение, в котором создается поток -Приоритет - Маска сходства — приостановленное число — Имя процесса - Индикатор флага — приостановленный индикатор |
Инструменты: -Искать — стек вызовов поиска — пометить только мой код — флаг выбора пользовательского модуля — группировать по -Столбцы — Развертывание и свертывание вызовов — развернуть и свернуть группы — заморозка и оттепель потоков Контекстное меню: — Отображение потоков в источнике — переключение на поток — замораживание выполняющегося потока - Оттаивание замороженного потока — пометка потока для дополнительного изучения - Отменаflag потока — переименование потока — Отображение и скрытие потоков Другие действия: — Просмотр стека вызовов для потока в dataTip |
Окно источника | Индикаторы потоков в левой области указывают один или несколько потоков (по умолчанию отключены с помощью контекстного меню в окне "Потоки ") | Контекстное меню: — переключение на поток — пометка потока для дополнительного изучения - Отменаflag потока |
Окно задач | — просмотр сведений об объектах Task , включая идентификатор задачи, состояние задачи (запланированное, выполнение, ожидание, взаимоблокировку) и назначенный задаче поток. — Текущее расположение в стеке вызовов. — делегат, переданный задаче во время создания |
— переключение на текущую задачу — флаг или отмена задержки задачи — заморозить или отморозить задачу |
Окно потоков GPU | — Столбец флага, в котором можно пометить поток, к которому нужно обратить особое внимание. — Текущий столбец потока, в котором желтая стрелка указывает текущий поток. — Столбец " Число потоков ", в котором отображается количество потоков в одном расположении. — Столбец строки , в котором отображается строка кода, в которой расположена каждая группа потоков. — Столбец адресов , в котором отображается адрес инструкции, в котором расположена каждая группа потоков. — Столбец расположения , который является расположением в коде адреса. — Столбец состояния , показывающий, активен ли поток или заблокирован. — Столбец плитки , показывающий индекс плитки для потоков в строке. |
— Изменение другого потока — Отображение определенной плитки и потока — Отображение или скрытие столбца — Сортировка по столбцу — групповые потоки - Заморозить или отморозить потоки — флаг или отмена задержки потока — Отображение только помеченных потоков |