Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Многопоточность позволяет повысить скорость реагирования приложения и, если приложение работает в многопроцессорной или многоядерный системе, увеличьте пропускную способность.
Процессы и потоки
Процесс — это исполняемая программа. Операционная система использует процессы для разделения выполняемых приложений. Поток — это базовая единица, для которой операционная система выделяет время процессора. Каждый поток имеет приоритет планирования и поддерживает набор структур, которые система использует для сохранения контекста потока при приостановке выполнения потока. Контекст потока включает всю информацию, необходимую потоку для плавного возобновления выполнения, включая его набор регистров ЦП и стек. Несколько потоков могут выполняться в контексте процесса. Все потоки процесса совместно используют свое виртуальное адресное пространство. Поток может выполнять любую часть кода программы, включая части, которые в настоящее время выполняются другим потоком.
Замечание
Платформа .NET Framework позволяет изолировать приложения в процессе с использованием доменов приложений. (Домены приложений недоступны в .NET Core.) Дополнительные сведения см. в разделе "Домены приложений" и "Потоки " статьи "Домены приложений ".
По умолчанию программа .NET запускается с одним потоком, который часто называется основным потоком. Однако он может создавать дополнительные потоки для параллельного выполнения кода или параллельно с основным потоком. Эти потоки часто называются рабочими потоками.
Когда следует использовать несколько потоков
Вы используете несколько потоков для повышения скорости реагирования приложения и использования многопроцессорной или многоядерных систем для повышения пропускной способности приложения.
Рассмотрим классическое приложение, в котором основной поток отвечает за элементы пользовательского интерфейса и отвечает на действия пользователя. Используйте рабочие потоки для выполнения ресурсоёмких операций, которые, в противном случае, будут занимать основной поток и сделать пользовательский интерфейс неотзывчивым. Вы также можете использовать выделенный поток для обмена данными между сетями или устройствами, чтобы повысить скорость реагирования на входящие сообщения или события.
Если программа выполняет операции, которые можно выполнять параллельно, общее время выполнения можно уменьшить, выполнив эти операции в отдельных потоках и выполняя программу в многопроцессорной или многоядерный системе. В такой системе использование многопоточных операций может увеличить пропускную способность вместе с повышенной скоростью реагирования.
Использование многопоточных операций в .NET
Начиная с .NET Framework 4 рекомендуется использовать многопоточную библиотеку задач (TPL) и Параллельную библиотеку LINQ (PLINQ). Дополнительные сведения см. в статье "Параллельное программирование".
Как TPL, так и PLINQ зависят от ThreadPool потоков. Класс System.Threading.ThreadPool предоставляет приложение .NET с пулом рабочих потоков. Также можно использовать потоки из пула. Дополнительные сведения см. в разделе "Управляемый пул потоков".
Наконец, можно использовать System.Threading.Thread класс, представляющий управляемый поток. Дополнительные сведения см. в разделе "Использование потоков и многопоточности".
Для доступа к общему ресурсу может потребоваться несколько потоков. Чтобы сохранить ресурс в некоррумпированном состоянии и избежать условий гонки, необходимо синхронизировать доступ к ресурсу между потоками. Кроме того, может потребоваться координировать взаимодействие нескольких потоков. .NET предоставляет ряд типов, которые можно использовать для синхронизации доступа к общему ресурсу или координации взаимодействия потока. Дополнительные сведения см. в разделе "Обзор примитивов синхронизации".
Обрабатывайте исключения в потоках. Необработанные исключения в потоках обычно завершают процесс. Дополнительные сведения см. в разделе "Исключения" в управляемых потоках.