Введение

Последовательность двоичных цифр – более теоретическое понятие в информатике, чем потоки данных. Бит-поток (или битовый поток), также известный как двоичная последовательность, представляет собой последовательность битов. Байт-поток – это последовательность байтов. Как правило, каждый байт состоит из 8 бит, поэтому термин "поток октетов" иногда используется как синоним. Октет может быть закодирован как последовательность из 8 бит различными способами (см. нумерация битов), поэтому не существует однозначного и прямого соответствия между байт-потоками и бит-потоками. Бит-потоки и байт-потоки широко используются в телекоммуникациях и вычислительной технике. Например, синхронные бит-потоки передаются по SONET, а протокол управления передачей (TCP) передает асинхронный байт-поток.

Отношение к байт-потокам тестов

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

Примеры

Термин "бит-поток" часто используется для описания конфигурационных данных, предназначенных для загрузки в полевую программируемую вентильную матрицу (FPGA). Хотя большинство FPGA также поддерживают метод параллельной загрузки байтов, такое использование могло возникнуть из-за распространенной практики конфигурирования FPGA из последовательного бит-потока, обычно из последовательной ПЗУ или чипа флэш-памяти. Детальный формат бит-потока для конкретной FPGA, как правило, является собственностью производителя FPGA. В математике ряд специфических бесконечных последовательностей битов изучались с точки зрения их математических свойств; к ним относятся последовательность Баума — Свита, последовательность Эренфюхта — Майциелски, слово Фибоначчи, последовательность Колакоски, последовательность регулярного складывания бумаги, последовательность Рудина — Шапиро и последовательность Тью — Морзе. В большинстве операционных систем, включая Unix-подобные и Windows, стандартные библиотеки ввода-вывода преобразуют доступ к файлам на нижнем уровне с использованием страниц или буферизации в парадигму байтового потока. В частности, в Unix-подобных операционных системах каждый процесс имеет три стандартных потока, которые являются примерами однонаправленных байтовых потоков. Механизм конвейеров Unix обеспечивает связь между различными процессами посредством байтовых потоков. Алгоритмы сжатия часто используют кодирование в бит-потоках, поскольку 8 бит, предоставляемых байтом (наименьшей адресуемой единицей памяти), могут быть избыточными. Хотя обычно реализуются на языках низкого уровня, некоторые языки высокого уровня, такие как Python и Java, предлагают встроенные интерфейсы для ввода-вывода бит-потоков. Хорошо известный пример протокола связи, предоставляющего своим клиентам сервис байтового потока, — это протокол управления передачей (TCP) из набора протоколов Интернет, обеспечивающий двунаправленный байтовый поток. Тип носителя в Интернете для произвольного байтового потока — Другие типы носителей определены для байтовых потоков в известных форматах.

Контроль потока

Часто содержимое байтового потока создается динамически, например, данные с клавиатуры и других периферийных устройств (/dev/tty), данные из генератора псевдослучайных чисел (/dev/urandom) и т. д. В тех случаях, когда получатель байтового потока (потребитель) использует байты быстрее, чем они могут быть сгенерированы, система использует синхронизацию процессов, чтобы заставить получателя ждать, пока не станет доступен следующий байт. Когда байты генерируются быстрее, чем их может использовать получатель, а производителем является программный алгоритм, система приостанавливает его, используя те же методы синхронизации процессов. Когда производитель поддерживает управление потоком, система отправляет сигнал готовности только тогда, когда потребитель готов к следующему байту. Когда производитель не может быть приостановлен – например, клавиатура или аппаратное обеспечение, не поддерживающее управление потоком – система обычно пытается временно сохранить данные в буфере, пока потребитель не будет готов к их обработке, как правило, используя очередь. Часто получатель может опустошить буфер до того, как он полностью заполнится. Производитель, который продолжает генерировать данные быстрее, чем они могут быть обработаны, даже после заполнения буфера, приводит к нежелательному переполнению буфера, потере пакетов, сетевой перегрузке и отказу в обслуживании.