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


Работа с потоками (C# и Visual Basic)

Потоки позволяют программе Visual Basic или C# выполнять параллельную обработку, за счет чего появляется возможность одновременного выполнения нескольких операций. Например, потоки можно использовать для наблюдения ввода данных пользователем, выполнения фоновых задач и обработки одновременных потоков ввода.

Потоки имеют следующие свойства.

  • Потоки позволяют программе выполнять параллельную обработку.

  • Пространство имен .NET Framework System.Threading упрощает использование потоков.

  • Потоки используют одни и те же ресурсы приложения. Дополнительные сведения см. в разделе Использование потоков и работа с потоками.

По умолчанию программа на языке Visual Basic или C# имеет один поток. Однако параллельно основному потоку могут создаваться и использоваться вспомогательные потоки. Эти потоки часто называются рабочими потоками.

Рабочие потоки могут использоваться для выполнения трудоемких или срочных задач без прерывания основного потока. Например, рабочие потоки часто используются в серверных приложениях для выполнения входящих запросов, не дожидаясь завершения выполнения предыдущего запроса. Рабочие потоки также используются для выполнения "фоновых" задач в настольных приложениях, что позволяет основному потоку (который отвечает за элементы пользовательского интерфейса) оставаться доступным для команд пользователя.

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

Обычно рабочие потоки используются для выполнения трудоемких или срочных задач, для которых не требуется большое количество ресурсов, используемых другими потоками. Естественно, некоторые используемые программой ресурсы должны быть доступны для нескольких потоков. В этих случаях пространство имен System.Threading предоставляет классы для синхронизации потоков. Эти классы включают Mutex, Monitor, Interlocked, AutoResetEvent и ManualResetEvent.

Можно использовать некоторые или все эти классы для синхронизации работы нескольких потоков, но некоторые многопоточные функции поддерживаются языками Visual Basic и C#. Например, инструкция Оператор SyncLock в Visual Basic и инструкция Lock в C# обеспечивают возможности синхронизации за счет неявного использования класса Monitor.

Примечание

В .NET Framework 4 многопоточное программирование значительно упростилось благодаря классам System.Threading.Tasks.Parallel и System.Threading.Tasks.Task, Parallel LINQ (PLINQ), новым классам параллельных коллекций в пространстве имен System.Collections.Concurrent и новой модели программирования, построенной по принципу управления задачами, а не потоками.Дополнительные сведения см. в разделе Параллельное программирование в .NET Framework.

Связанные разделы

Заголовок

Описание

Многопоточные приложения (C# и Visual Basic)

Справка по созданию и использованию потоков.

Параметры и возвращаемые значения для многопоточных процедур (C# и Visual Basic)

Справка по передаче и возвращению параметров в многопоточных приложениях.

Пошаговое руководство. Многопоточность с помощью компонента BackgroundWorker (C# и Visual Basic)

Пример, показывающий создание простого многопотокового приложения.

Синхронизация потоков (C# и Visual Basic)

Описание управления взаимодействием потоков.

Таймеры потоков (C# и Visual Basic)

Описание запуска процедур в отдельных потоках через фиксированные промежутки времени.

Группировка потоков в пул (C# и Visual Basic)

Описание использования пула рабочих потоков, управляемых системой.

Практическое руководство. Использование пула потоков (C# и Visual Basic)

Демонстрация синхронизированного использования нескольких потоков в пуле.

Управляемая поточность

Описание реализации работы с потоками в .NET Framework.

Главы в популярных книгах

Threading в книге C# 3.0 in a Nutshell, Third Edition: A Desktop Quick Reference

Asynchronous Methods в книге C# 3.0 in a Nutshell, Third Edition: A Desktop Quick Reference

Threading and Synchronization в книге C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers