Связь между потоком и буфером?

Я начинающий программист, не могли бы вы помочь мне представить, что такое поток, это фиксированный массив байтов, который передает данные из, например, файла в Y? А что здесь Y, буфер или что-то другое? Каким образом буфер связан с потоком?

stackoverflow.com/a/5144867/2850543 для потоков
Millie Smith 29.05.2019 06:30

Кроме того, я не голосовал за то, чтобы закрыть этот вопрос как слишком широкий, потому что я не считаю, что это широкий вопрос. На него есть краткий и точный ответ.

Millie Smith 29.05.2019 06:31

Термин «поток» используется для множества вещей, некоторые из которых перечислены в эта статья в википедии.

user3386109 29.05.2019 06:35

@ user3386109: Довольно легко представить, что OP имел в виду под «потоком», особенно в отношении «буфера» и под тегом с.

Amadan 29.05.2019 06:36

@ Амадан Да, ты читал статью? В нем перечислены несколько примеров "что такое поток", о чем спрашивал ОП.

user3386109 29.05.2019 06:39

@user3386109 user3386109 это переполнение стека, зачем мне спрашивать здесь о потоке воды или о чем-то еще?

Van Teo Le 29.05.2019 06:42

@VanTeoLe Вы тоже не читали статью, не так ли? В статье ничего не сказано о воде.

user3386109 29.05.2019 06:43

@user3386109: user3386109: Я прочитал это, но я думаю, что OP будет сбит с толку разнообразием связанных значений. Очевидно, что значения связаны, как только их узнаешь, но в данный момент я твердо верю, что ОП должен сосредоточиться на одном из них - на том, который имеет отношение к его запросу, - и только тогда, когда это необходимо, чтобы исследовать, как это связано с другими. ВанТеоЛе - о потоке воды никто не упоминал.

Amadan 29.05.2019 06:44

@ user3386109 моя вина извините

Van Teo Le 29.05.2019 06:47

@user3386109 user3386109 Если это был ответ мне, то на странице, на которую вы ссылаетесь, есть определение потока в одном предложении (первое предложение). Если нет, то продолжайте.

Millie Smith 29.05.2019 07:07

@MillieSmith Хорошо, я продолжу. Для справки: этот комментарий был направлен OP (в частности, в ответ на "Можете ли вы помочь мне представить, что такое поток") и не имел отношения к вашим комментариям.

user3386109 29.05.2019 07:10

@ user3386109 Звучит хорошо. Я определенно неправильно истолковал, поэтому извините, если вы получили уведомление о моем первом сообщении, которое я удалил (или если 28k rep позволяет вам видеть удаленные комментарии)

Millie Smith 29.05.2019 07:16

@MillieSmith Я думаю, что только алмазные моды могут видеть удаленные комментарии (я, конечно, не могу). Так что не беспокойтесь.

user3386109 29.05.2019 07:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
13
179
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Буфер — это массив (часть памяти), который используется для временного хранения данных. Входной буфер обычно заполняется операционной системой из входного потока; выходной буфер (после заполнения программистом) потребляется ОС.

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

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

Образно говоря, fflush() выливает воду из ведра в ванну?

Van Teo Le 29.05.2019 06:43

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

Amadan 29.05.2019 06:47

Разница между буфером и потоком

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

Последовательность байтов, поступающих в программу, называется входным потоком. Последовательность байтов, исходящих из программы, называется выходным потоком. Использование Stream делает машины ввода-вывода независимыми.

Буфер — это последовательность байтов, которые хранятся в памяти.

В C операции ввода-вывода асинхронны: вы не знаете, когда у вас есть данные и сколько их. Поэтому буфер обычно используется для сбора данных из потока. (файл, сокет, устройство). Когда буфер заполнен, потребители этого потока получают уведомление и могут потреблять данные из буфера до тех пор, пока он не будет исчерпан. Затем подождите, пока буфер снова не заполнится, прежде чем использовать эти данные. Это место для временного хранения чего-либо, чтобы смягчить разницу между скоростью ввода и скоростью вывода. Пока производитель работает быстрее, чем потребитель, производитель может продолжать хранить выходные данные в буфере. Когда потребитель ускоряется, он может читать из буфера. Буфер находится посередине, чтобы преодолеть разрыв.

Y в вашем вопросе может быть файлом, сокетом или устройством (I/O).

Надеюсь, это решит ваш запрос :)

Другие вопросы по теме