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

Что такое поток в программировании

  • автор:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

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

Потоки информации: особенности и разновидности

Потоки информации: особенности и разновидности

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

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

Определение

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

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

Потоки (данных и не только) – последовательность инструкций, выполняемых параллельно с другими потоками. Каждая программа создает минимум одну такую «направленность».

Виды

Существуют различные виды потоков. Классификация может быть по типу движения данных:

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

Также есть разделение по типу используемых данных. Не всегда приложения работают непосредственно с байтами – в языках разработки, включая Java и C++, может использоваться текстовая информация. На основании этого выделяются следующие виды потоков:

Также в разработке ПО различают следующие типы потоков данных:

  1. C++. Здесь работа осуществляется вместе со стандартной библиотекой языка. А именно – при помощи iostream.
  2. Пространство имен System.IO. Этот вариант актуален для всех языков платформы NET.Framework.
  3. Пакет java.io. Такая реализация поддерживается на платформе Java.

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

Способ организации

Поток определяет способ организации работы с электронными материалами в системе или приложении. В данном смысле существует иная классификация. Она включает в себя множество вариантов, но ключевыми в JavaScript и C++ являются такие методы:

  • однонаправленный;
  • двунаправленный (или многопоточный).

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

Однонаправленный вариант

Так называется поток, который определяет всего одну задачу в каждой части приложения – она может или получить данные, или передать. Его направление не будет меняться. Оно функционирует всегда по одному и тому же принципу.

Однонаправленные потоки данных в реальной жизни имеют простой пример-интерпретацию – водопровод. Модуль здесь будет выступать частью трубы:

Потоки информации: особенности и разновидности

Здесь сведения будут переходить от одного модуля к другому. Выходные сведения предыдущего становятся входными для последующего «блока».

Потоки информации: особенности и разновидности

Выше – пример того, как на практике выглядит соответствующая картина.

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

Двунаправленный вариант

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

Потоки информации: особенности и разновидности

Этот вариант чаще всего используется для связи модели и представления. Когда обновление (пример – текст в поле ввода) сразу корректирует остальные сведения в заданной модели – это и есть двунаправленная связь.

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

Асинхронность

Видов потоков данных много – классифицировать их удается по разным характеристикам. Если кто-нибудь попросит «Назовите основные типы потоков», проблем с этим не будет. В плане обработки электронных материалов в операционных системах и разработке ПО преобладает асинхронность.

Это – многопоточность. В JS она изначально не предусмотрена. Добиться асинхронности можно при помощи специальных методов, классов, операций и движков. Асинхронность определяет следующий алгоритм работы:

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

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

В JavaScript

JavaScript – язык программирования, который умеет обрабатывать только один поток данных. Задача асинхронности здесь решена при помощи специального инструмента – Worker.

Он подходит для:

  • обработки сложных операций, которые могут выполняться без блокировки работы пользователя;
  • внесение корректировок в отдельные файлы-модули;
  • создание для каждого сформированного модуля объекта Worker, используемого для коммуникации.

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

Java

Java в плане потоковых вопросов – это более гибкий язык. Он поддерживает многопоточность. Такая синхронизация выполняется за счет ключевого слова synchronized. Оно применяется в классах для определения синхронизированных блоков и методов.

Ключевое слово synchronized не подходит для переменных и атрибутов при определении классов. У Java также есть специальная библиотека, включающая в себя спецклассы для работы с несколькими потоками данных.

Потоки информации: особенности и разновидности

Выше – пример синхронизации методов в Java. Здесь можно увидеть больше наглядных примеров работы с потоками.

C++

Стандартная библиотека C++ поддерживает средства, при помощи которых программа обрабатывает потоки данных асинхронно. В ней есть набор классов для работы с соответствующими элементами.

Сейчас существует стандарт SFML. В нем можно создавать потоки при помощи sf::Thread:

Потоки информации: особенности и разновидности

Функции main и func выполняются параллельно. Происходит это после того, как была выполнена «операция», которая называется thread.launch(). Результат – текст, выводимый обеими функциями, будет смешиваться в консоли:

Потоки информации: особенности и разновидности

  1. Точка входа в поток должна быть передана в sf::Thread.
  2. Sf::Thread старается быть гибким. Он пытался принимать различные точки входа: методы классов или non-member-функции, выражения с аргументами или без них, функторы и так далее.
  3. Заданный пример показывает, как реализовывать функцию-член.

C++ может различными способами обрабатывать потоки данных:

  • get_id – возвращает идентификатор;
  • sleep_for – «спит» на протяжении установленного промежутка времени;
  • sleep_untill – «спит» до конкретного момента;
  • yield – перенастройка текущих потоков путем передачи приоритетов.

Также вместо std::Thread можно воспользоваться std::async. Данный вариант менее мощный, но его намного проще использоваться, если нужно асинхронно запустить ту или иную функцию:

Потоки информации: особенности и разновидности

Здесь можно увидеть больше информации о многопоточности непосредственно в C++.

Как быстро освоить направление

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

Но есть и более простое и современное решение. Оно носит название онлайн-курсов. Пример – от образовательного центра OTUS. Дистанционно пользователи смогут освоить одно или несколько IT-направлений и профессий одновременно. На занятиях не только научат создавать и работать с потоками, но и писать сложные коды.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus ! Ниже – один из них:

Поток данных

Поток данных (англ. stream ) в программировании — абстракция, используемая для чтения или записи файлов, сокетов и т. п. в единой манере.

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

Поддержка потоков включена в большинство языков программирования и едва ли не во все современные (на 2008 год) операционные системы.

При запуске процесса ему предоставляются предопределённые стандартные потоки.

Возможность перенаправления потоков позволяет связывать различные программы, и придаёт системе гибкость, являющуюся частью философии Unix.

Поток данных в программировании

Абстракция потока особенно важна в языке программирования Си, где он представляет собой источник ввода и/или вывода данных, обычно байтов, связанный с файлом, устройством, либо другим процессом. Работа с потоками перенесена во многие другие языки:

  • C++: iostream из стандартной библиотеки C++.
  • Языки платформы .NET Framework (например, C#): Base Class Library, пространство имен System.IO.

Поток данных в операционных системах

Пример цепи процессов общающихся с помощью потоков данных.

Командная оболочка UNIX интенсивно использует абстракцию потока для совместного выполнения нескольких утилит.

Примечания

См. также

  • Стандартные потоки
  • Враппер
  • Именованный канал
  • Битовый поток
Это заготовка статьи о компьютерах. Вы можете помочь проекту, исправив и дополнив её.
Это примечание по возможности следует заменить более точным.

Логический • Низший тип • Коллекция • Перечисляемый тип • Исключение • First-class function • Opaque data type • Recursive data type • Семафор • Поток • Высший тип • Type class • Unit type • Void

Абстрактный тип данных • Структура данных • Интерфейс • Kind (type theory) • Примитивный тип • Subtyping • Шаблоны C++ • Конструктор типа • Parametric polymorphism

  • Структуры данных
  • UNIX

Wikimedia Foundation . 2010 .

  • Поток (студенческий)
  • Поток сознания (За гранью возможного)

Полезное

Смотреть что такое «Поток данных» в других словарях:

  • поток данных — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN data stream … Справочник технического переводчика
  • поток данных в физическом канале — На восходящей линии поток данных, который передается по одному физическому каналу. На нисходящей линии поток данных, передаваемый по одному физическому каналу в каждой соте активной группы сот. (МСЭ Т Q.1741). [http://www.iks… … Справочник технического переводчика
  • поток данных (цифрового телевизионного сигнала) — Последовательность битов, составляющих цифровой телевизионный сигнал, передаваемая с заданной скоростью по электромагнитным системам. [ГОСТ Р 52210 2004] Тематики телевидение, радиовещание, видео Обобщающие термины цифровые сигналы и потоки, их… … Справочник технического переводчика
  • поток данных в каналах связи — [Интент] Тематики электросвязь, основные понятия EN data flow on communication channels … Справочник технического переводчика
  • поток данных различного формата — — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN media stream … Справочник технического переводчика
  • поток данных через границу государства — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN transborder dataflow … Справочник технического переводчика
  • поток данных (цифрового телевизионного сигнала) — 37 поток данных (цифрового телевизионного сигнала): Последовательность битов, составляющих цифровой телевизионный сигнал, передаваемая с заданной скоростью по электромагнитным системам. Источник: ГОСТ Р 52210 2004: Телевидение вещательное… … Словарь-справочник терминов нормативно-технической документации
  • программный поток данных (цифрового вещательного телевидения) — 39 программный поток данных (цифрового вещательного телевидения): Поток данных, образованный путем мультиплексирования элементарных потоков видеоданных и звукоданных цифрового вещательного телевидения, имеющих одну общую тактовую частоту, и… … Словарь-справочник терминов нормативно-технической документации
  • программный поток данных — Поток данных, образованный путем мультиплексирования элементарных потоков видеоданных и звукоданных цифрового вещательного телевидения, имеющих одну общую тактовую частоту, и сформированный из программных пакетов вещательного телевидения… … Справочник технического переводчика
  • программный поток данных (цифрового вещательного телевидения) — Поток данных, образованный путем мультиплексирования элементарных потоков видеоданных и звукоданных цифрового вещательного телевидения, имеющих одну общую тактовую частоту, и сформированный из программных пакетов вещательного телевидения… … Справочник технического переводчика
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Поток (программирование)

Поток ( _en. stream) — абстрактная последовательность инструкций или данных вообще, привязанная к соответствующему дескриптору (может быть представлен именем потока).

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

Поддержка потоков включена в большинство языков программирования и едва ли не во все современные (на 2008 год) операционные системы.

При запуске процесса ему предоставляются предопределённые стандартные потоки.

Возможность перенаправления потоков позволяет связывать различные программы, и придаёт системе гибкость, являющуюся частью философии Unix.

Поток данных в программировании

Абстракция потока особенно важна в языке программирования Си, где он представляет из себя источник ввода и/или вывода данных, обычно байтов, связанный с файлом, устройством либо другим процессом. Работа с потоками перенесена во многие другие языки.

Поток данных в операционных системах

Командная оболочка UNIX интенсивно использует абстракцию потока для совместного выполнения нескольких утилит.

См. также

* Стандартные потоки
* Враппер

Wikimedia Foundation . 2010 .

  • Сагырбаев, Курмангазы
  • Лённрот, Элиас

Смотреть что такое «Поток (программирование)» в других словарях:

  • Поток выполнения — Для термина «Поток» см. другие значения. Процесс с двумя потоками выполнения на одном процессоре Поток выполнения (анг … Википедия
  • Поток минимальной стоимости — Задача о потоке минимальной стоимости состоит в нахождении самого дешёвого способа передачи определённого количества потока через транспортную сеть. Содержание 1 Определения 2 Отношение к другим задачам … Википедия
  • Поток POSIX — POSIX Threads стандарт потоков (нитей) выполнения, определяющий API для создания и управления ими. Библиотеки, реализующие этот стандарт (и функции этого стандарта), обычно называются Pthreads (функции имеют приставку «pthread »). Хотя наиболее… … Википедия
  • Линейное программирование — Линейное программирование математическая дисциплина, посвящённая теории и методам решения экстремальных задач на множествах мерного векторного пространства, задаваемых системами линейных уравнений и неравенств. Линейное программирование… … Википедия
  • Класс (программирование) — У этого термина существуют и другие значения, см. Класс. Класс в программировании набор методов и функций. Другие абстрактные типы данных метаклассы, интерфейсы, структуры, перечисления характеризуются какими то своими, другими… … Википедия
  • Объектно-ориентированное программирование — Эта статья во многом или полностью опирается на неавторитетные источники. Информация из таких источников не соответствует требованию проверяемости представленной информации, и такие ссылки не показывают значимость темы статьи. Статью можно… … Википедия
  • Событийно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
  • Реактивное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
  • Грамотное программирование — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии … Википедия
  • Парное программирование — техника программирования, при которой весь исходный код создаётся парами людей, программирующих одну задачу, сидя за одним рабочим местом. Один программист управляет компьютером и, в основном, думает над кодированием в деталях. Другой программист … Википедия

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

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