McZim
|
|
« : 09-06-2011 06:59 » |
|
Всем привет. У меня такой вопрос. Например у нас есть программа, которая работает с буфером и файловой системой. Суть работы в следующем. Программа принимает некоторые данные в буфер и, например, каждые три секунды сбрасывает данные из буфера в файл, на файловой системе. Как программа работает с буфером не знаю, какие там есть способы в юникс системах, например memset, memcpy? Так вот, вопрос вот в чем, если например у нас буфер размером 5Мб, а за три секнды успело заполниться только 2Мб, что будет сброшено на диск? Весь буфер или только его заполненная часть? Если весь то что будет происходить с "пустой" частью буфера?
Добавлено через 25 минут и 20 секунд: С точки зрения кода вроде понятно что операция происходит целиком с буфером. Увидел только указание размеров. А вот с точки зрения системы как? То есть возможно я зря думаю ниже кода, как сказано в коде так и будет!? Или все же...
|
|
« Последнее редактирование: 09-06-2011 09:57 от Джон »
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 09-06-2011 07:26 » |
|
McZim, как буфер в программе реализован, так и будет.
Белые люди делают очередь на запись с циклическим движением указателей в буфере.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #2 : 09-06-2011 07:28 » |
|
а откуда система знает размер твоего! буфера, только ты сам. Сказал 3 метра, значит 3 метра и будет сброшено
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #3 : 09-06-2011 07:29 » |
|
Dimka, а указатели куда указывают? Sla, в том то и дело, что буфер размером 5 метров, а заполнился на три. Вопрос, сколько будет сброшено на диск?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #4 : 09-06-2011 07:39 » |
|
ну так 5 и будет сброшенно, вернее столько сколько ты сказал.
буфер = 5 с инфой = 3 буфер сброса = 1
Сброс 1 Сброс 1 Сброс 1
Сброс 1 Сброс 1
если хочешь меньше, то отслеживай конец буфера (указатель на последние данные)
|
|
« Последнее редактирование: 09-06-2011 07:41 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #5 : 09-06-2011 07:51 » |
|
В этом и вопрос. Если он сбрасывает ВЕСЬ буфер, что будет происходить с "пустой" частью буфера? Она будет записана на диск? В каком виде, мусор?
Если отслеживать конец данных в буфере, это нормальная практика? Есть стандартные механизмы описанные например в POSIX?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #6 : 09-06-2011 07:57 » |
|
Ты же не очищаешь буфер пред использованием?
Сброшено буде ВСЕ пример
выделил буфер (пусть будет зачищен). заполнил до половины - сбросил. Будет сброшен весь ( в конце - заполнитель очистки) Указатель на начало
заполнил до четверти - сбросил. Будет сброшен четверть + четверть до половины (если буфер не очищен) ( в конце - заполнитель очистки) Указатель на начало
Но ты ведь пишешь в буфер по определенному указателю
Посчитай разницу между началом буфера и указателем на начало записи в буфер, столько и сбрасывай.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #7 : 09-06-2011 08:07 » |
|
Понял. То есть, если у нас запись в основном по 3, 3,5 метра в буфер, а размер буфера 5 метров. То уменьшив размер буфера, не факт что мы сможем повысить эффективность дисковой подсистемы, за счет НЕ записи "не нужных" двух (2) метров, потому как нужно быть уверенным, как именно работаем с буфером. Например если, как ты описал, мы будем отслеживать позицию указателя относительно от начала буфера, то нам не важен размер буфера, главное не выйти за его рамки.
Так?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #8 : 09-06-2011 08:46 » |
|
да, ты правильно понял.
Буфера, нужен чтобы не потерять данные на момент сбора и для уменьшения операций ввода/вывода И если уж настало время, то нужно сбрасывать только актуальные данные, а об актуальности говорит указатель "записи" в буфер.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #9 : 09-06-2011 09:43 » |
|
Ок, всем спасибо!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #10 : 09-06-2011 11:19 » |
|
Что вообще за буфер? Ничига не понятно.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #11 : 09-06-2011 12:09 » |
|
RXL, я тоже ничего не понял. Но Sla говорит так уверенно, будто знает, что за буфер
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #12 : 09-06-2011 12:19 » |
|
Та ладно вам прибедняться...
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 09-06-2011 13:18 » |
|
Слав, если буфера ОС, то непонятно, какие, если приложения - то вообще ничего не понятно.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #14 : 09-06-2011 13:29 » |
|
Так как оказалось, что я понял Макса, а Макс понял меня, то попытаюсь объяснить. есть программа, которая работает с буфером Это значит что она сбрасывает что-то в буфер (свой) и файловой системой. И в какой-то момент сбрасывает этот буфер на диск. если например у нас буфер размером 5Мб Этот буфер в программе за три секнды успело заполниться только 2Мб И каждые три секунды, например буфер сбрасывается на диск что будет сброшено на диск?Весь буфер или только его заполненная часть? Ответ: Весь буфер. Если весь то что будет происходить с "пустой" частью буфера? Ответ: Сбрасывай только "заполненную часть"
|
|
« Последнее редактирование: 09-06-2011 13:34 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #15 : 09-06-2011 18:53 » |
|
Ответ: Весь буфер. Почему? Если буфер программы, то сбрасывается он так, как написано в программе. Я лично не знаю, как написано. Ответ: Сбрасывай только "заполненную часть" Но вывод из всего сказанного верный
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #16 : 09-06-2011 19:31 » |
|
Фиксированный буфер обычно либо сплошной, либо сегментированный. Соотв., либо известно начало и конец, либо есть список заполненных сегментов. Вроде бы очевидно. Потому и не понятно было.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Антон (LogRus)
|
|
« Ответ #17 : 10-06-2011 03:43 » |
|
А чем стандартная буферизация в ostream не устроила? зачем свой велосипед?
|
|
|
Записан
|
Странно всё это....
|
|
|
McZim
|
|
« Ответ #18 : 10-06-2011 14:19 » |
|
мне просто нужно было абстрактно понять, я подзабыл. Поэтому ничего конкретного!
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
|