Что такое поток в с
Перейти к содержимому

Что такое поток в с

  • автор:

Потоки

Система ввода/вывода С предназначена для работы со множеством устройств, включая терминалы дисковые накопители и так далее. Хотя каждое устройство отличается от другого, система вводу вывода преобразует их в единое логическое устройство — поток. Все потоки похожи своим поведением. Поскольку потоки не зависят от устройств, одни и те же функции могут записывать информацию в файл на диске и использоваться для записи на другое устройство, например консоль. Существует два типа потоков: текстовые и двоичные.

Текстовые потоки

Текстовые потоки — это последовательность символов. В текстовых потоках некоторые символы могут преобразовываться согласно требованиям среды. Например, символ новой строки может преобразовываться в пару «возврат каретки — перевод строки». Следовательно, может не быть однозначного соответствия между записываемыми или считываемыми символами и символами во внешнем устройстве. Также из-за возможного перевода число символов, прочитанных или записанных, может не совпадать с числом символов во внешнем устройстве.

Двоичные потоки

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

Потоки и работа с ними

Многопоточность позволяет увеличивать скорость реагирования приложения и, если приложение работает в многопроцессорной или многоядерной системе, его пропускную способность.

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

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

По умолчанию программа .NET запускается с одним потоком, часто называемым основным потоком. Тем не менее она может создавать дополнительные потоки для выполнения кода параллельно или одновременно с основным потоком. Эти потоки часто называются рабочими потоками.

Цели применения нескольких потоков

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

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

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

Как использовать многопоточность в .NET

Начиная с .NET Framework 4, для многопоточности рекомендуется использовать библиотеку параллельных задач (TPL) и Parallel LINQ (PLINQ). Дополнительные сведения см. в разделе Параллельное программирование.

Библиотека параллельных задач и PLINQ полагаются на потоки ThreadPool. Класс System.Threading.ThreadPool предоставляет приложения .NET с пулом рабочих потоков. Также можно использовать потоки из пула потоков. Дополнительные сведения см. в разделе Управляемый пул потоков.

Наконец, можно использовать класс System.Threading.Thread, который представляет управляемый поток. Дополнительные сведения см. в разделе Использование потоков и работа с потоками.

Несколько потоков могут требовать доступ к общему ресурсу. Чтобы сохранить ресурс в непроверенном состоянии и избежать условий гонки, необходимо синхронизировать доступ к потоку к нему. Вы также можете координировать взаимодействие нескольких потоков. Платформа .NET предоставляет ряд типов для синхронизации доступа к общему ресурсу или координации взаимодействия потоков. Дополнительные сведения см. в разделе Обзор примитивов синхронизации.

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

См. также

  • Объекты и функциональные возможности работы с потоками
  • Рекомендации по работе с потоками
  • Процессы и потоки
  • Параллельная обработка в .NET
  • Асинхронные шаблоны программирования в .NET

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Потоки

Системы ввода/вывода С и С++ имеют одну общую особенность: они обе оперируют потоками. То, что потоки в С и С++ подобны между собой, означает, что все, что известно о потоках в языке С, полностью применимо и в С++.

Предопределенные потоки С++

Как и в языке С, в С++ существует несколько предопределенных потоков, открывающихся автома­тически вместе с началом выполнения программы. Ими служат cin, cout, cerr и clog. Как извест­но, cin является потоком, ассоциированным со стандартным вводом, а cout представляет собой поток, ассоциированный со стандартным выводом. Потоки cerr и clog используются для вывода сообщений об ошибках. Разница между cerr и clog заключается в том, что, хотя они оба привяза­ны к стандартному выводу, cerr не буферизирован, поэтому все посланные в него данные выво­дятся немедленно. В противоположность этому clog буферизирован, так что данные выводятся только тогда, когда буфер оказывается полным.

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

Что такое поток

Как и В, C++ не имеет встроенных возможностей ввода и вывода. Однако все компиляторы C++ объединяются с системным, объектно-ориентированным пакетом ввода-вывода, известным как iostream классы. Поток является центральным понятием iostream классов. Можно считать, что поток — это смарт-файл, который выступает в качестве источника и назначения для байт. Характеристики потока определяется его классом и пользовательскими операторами вставки и извлечения.

С помощью драйверов устройств дисковая операционная система взаимодействует с клавиатурой, монитором, принтером и портами ввода-вывода как с расширенными файлами. Классы iostream взаимодействуют с этими расширенными файлами. Встроенные классы поддерживают чтение из памяти и запись в память, причем синтаксис этих операций идентичен синтаксису для операций дискового ввода-вывода, что позволяет легко создавать производные классы потока.

В этом разделе

См. также

Дополнительные ресурсы

Значок отказа согласно Закону Калифорнии о защите конфиденциальности потребителей (CCPA)

  • Светлая
  • Темная
  • Высокая контрастность
  • Предыдущие версии
  • Блог
  • Участие в доработке
  • Конфиденциальность
  • Условия использования
  • Товарные знаки
  • © Microsoft 2023

Дополнительные ресурсы

Значок отказа согласно Закону Калифорнии о защите конфиденциальности потребителей (CCPA)

  • Светлая
  • Темная
  • Высокая контрастность
  • Предыдущие версии
  • Блог
  • Участие в доработке
  • Конфиденциальность
  • Условия использования
  • Товарные знаки
  • © Microsoft 2023

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *