0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
1 | |
Как можно представить себе поток?17.08.2014, 13:19. Просмотров 1803. Ответов 14
Метки нет Все метки)
(
Как можно представить себе потоки в С++? В книге конечно разъясняют, но ориентируются видимо не на таких гуманитариев, как я.
Возникают вопросы по поводу: где этот поток вообще находится? Почему одни пишут, что он уже предопределен в операционной системе, а книга говорит, что поток - это классовый объект, но класс, он ведь создается не в операционной системе? Как визуализировать себе эту абстракцию? и так далее... Википедия заводит только в темный лес... Я задавал уже вопросы косвенно относящиеся к потокам, но хоть там и были хорошие ответы, понять их толком у меня не очень получилось, за что извиняюсь. В книге у меня возникает путаница, когда в книге, одними и теми же словами пытаются объяснить разные вещи. Если дадите ссылку на источник для гуманитариев, буду премного благодарен, если же сами разъясните, буду благодарен еще больше. Если будете объяснять, то прошу вас с примерами, вроде "видишь дома, их 4", хотя я не думаю, что если будете объяснять как-то по-сложней у меня возникнут серьезные проблемы. Заранее спасибо.
0
|
|
17.08.2014, 13:19 | |
Поток ввода cin работает сам по себе Как можно представить множества как вектора произвольной длины
|
|
2685 / 1856 / 552
Регистрация: 05.06.2014
Сообщений: 5,361
|
|
17.08.2014, 13:49 | 2 |
![]() Решение
3
|
Заблокирован
![]() |
|
17.08.2014, 13:51 | 4 |
Процесс - это бизнесмен, у которого есть наемные чернорабочие (потоки). Время от времени перед бизнесменом возникают задачи - "построить дом", "разгрузить машину", в зависимости от её размера на решение её бизнесен нанимает от 1-го до нескольких рабочих.
Саму же задачу каждый бизнесменн получает из "конторы" - планировщика задач.
0
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
17.08.2014, 13:54 [ТС] | 5 |
Jupiter, скорее всего про потоки данных
Добавлено через 1 минуту -=ЮрА=-, Задачи вроде вывода информации? То есть cout - это поток, то есть чернорабочий? Добавлено через 1 минуту Renji, print(""); - это тоже трубка?
0
|
Заблокирован
![]() |
|
17.08.2014, 13:56 | 6 |
- cout в абстракции - это перенаправление работы "чернорабочего" на устроство вывода -проще всего так представить : рабочий испёк булочек, а уж отправить их в магазин(монитор) или на склад (в файл) решает бизнесмен, которому указание на направление продукции выдал сам пользователь. Не путай потоки данных и потоки процессов(разные сущности с похожими названиями). Поток данных - это лишь канал по которому идёт продукция (данные), создали это продукцию потоки определённого процесса
1
|
2685 / 1856 / 552
Регистрация: 05.06.2014
Сообщений: 5,361
|
|
17.08.2014, 14:00 | 7 |
0
|
11 / 11 / 3
Регистрация: 08.03.2014
Сообщений: 70
|
|
17.08.2014, 14:19 | 8 |
![]() Решение
Если абстрагировать роботу потоков даных то можно вообразить это как водопровод. С одной стороны трубы тот кто подает воду(например объект cout), а с другой потребитель этой воды(например консоль). Тогда самая труба это операция "<< ", а вода это напрмер какая-то переменная. Ну в общем как то так: cout (водопроводчики — подают воду) <<(труба) вода(переменная). В конечном результате потребитель(в даном случае консоль) получит свою воду(переменную в виде текствой информации).
Все это усложняется посредством буфера — это когда вода накапливается в определенном резервуаре, а потом одноразово передается потребителю, вместо того что бы капля за капалей(то есть побайтно) передавать воду(информацию). Но про буфер вам наверное лучше отдельно почитать.(Хотя в приницпе — ничего сложного).
2
|
![]() 3206 / 1733 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
17.08.2014, 14:24 | 9 |
Ну, входной поток и выходной поток – это абстракции, суть которых в том, что из первого можно последовательно получить данные, а во второй последовательно отправить. Вот и все, собственно. Причем не сырые данные в виде битов и байтов, а любого типа, в том числе определенного пользователем. В С++ весь обмен данными через потоки устроен.
Что касается внутреннего устройства потока, то он содержит объект-буфер, унаследованный от класса basic_streambuf, который занимается низкоуровневым хранением данных потока, и хранит их в виде последовательностей символов либо в оперативной памяти, либо во внешнем файле.
1
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
17.08.2014, 14:26 [ТС] | 10 |
Gwini, Когда вы только первый раз начали изучать С++, как вы представляли себе поток?
Добавлено через 1 минуту Mr.X, После разговорах о буферах мне становится страшновато. Стоит ли мне сейчас зацикливаться над этими понятиями, или продолжать читать учебник и уже при изучении полного справочника по С++ накалпливать такие глубокие знания? Возможно, что произойдет такое осинение и я пойму все по мере программирования?
0
|
11 / 11 / 3
Регистрация: 08.03.2014
Сообщений: 70
|
|
17.08.2014, 14:33 | 11 |
Unifan, изучать то я начал месяца полтора назад, про ввод/ввывод вообще недавно прочитал. Представлял как трубопроводы, т.к. в книжке картинка была такая
![]()
1
|
![]() 3206 / 1733 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
17.08.2014, 14:33 | 12 |
Да нет, я думаю. Просто понять, что поток - это абстракция для последовательного ввода-вывода данных. А обличье она совершенно разное может принимать - это может быть и устройство, и строка, и контейнер, и все что угодно.
1
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
17.08.2014, 14:36 [ТС] | 13 |
Mr.X, Спасибо за облегчение так сказать.
Gwini, Очень вам благодарен, я обязательно прочту тот материал
0
|
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
|
|
18.08.2014, 17:21 [ТС] | 14 |
Mr.X, я вот начал перечитывать про потоки и заметил интересную вестч. Поток основан на системе ввода-вывода С++, которая в свою очередь реализована через сложную систему иерархий классов -> потоки такие как cout, cin, cerr, clog - это не более чем грубо говоря "объекты классов ввода-вывода". Можно не забивать себе голову абстракциями и представлять поток, как объект для ввода-вывода данных? Или он все-таки не является объектом?
0
|
![]() 3206 / 1733 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
18.08.2014, 17:41 | 15 |
Ну, я, собственно, это и пытался сказать, только другими словами. Ну да, потоки, применяемые в программе, это объекты потоковых классов.
Добавлено через 4 минуты Собственно, класс в С++ - это абстрактный тип данных, т.е. тип, описывающий некоторую абстракцию, а объект этого класса эту абстракцию реализует.
0
|
18.08.2014, 17:41 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Можно ли число C представить как разность квадратов двух натуральных чисел?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |