Можете ли вы объяснить концепцию потоков? - PullRequest
175 голосов
/ 03 февраля 2009

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

По какой-то причине эта концепция просто не подходит для меня. Я прочитал кучу статей, но думаю, что мне нужна аналогия или что-то в этом роде.

Ответы [ 15 ]

1 голос
/ 03 февраля 2009

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

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

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

1 голос
/ 03 февраля 2009

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

0 голосов
/ 14 февраля 2013

Я буду кратким, я просто пропустил слово здесь:

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

(Теперь, поскольку мы все знаем, что такое очереди, нет необходимости объяснять это дальше.)

0 голосов
/ 03 февраля 2009

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

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

0 голосов
/ 03 февраля 2009

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

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

В самом деле, нет ничего плохого во взаимодействии с самим резервным хранилищем, за исключением того, что оно связывает вас с реализацией резервного хранилища.

...