<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783998</guid>
        <pubDate>Thu, 29 Nov 2018 05:00:21 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783998</link>
        <description><![CDATA[sergioK: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783994'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-29T04:06:57+03:00">29.11.18, 01:06</time></span><div class='quote '><strong class='tag-b'>Qraizer</strong>, сенкс, что не поленился :) Интересно, цифры конечно разные, но соотношения цифр на разных вариантах буферов - вполне похожи как в моем эксперименте.<br>
<br>
1) Первый эксперимент - кэш в 1 мег выигрывает у кэша в 256к<br>
2) Второй эксперимент с кэшем в 256к и 16 мегами - дает максимальную общую производительность проги<br>
3) Последний эксперимент - что творит венда с записью на USB с обоими кэшами по 16 мег, только ей известно<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T21:42:24+00:00">28.11.18, 21:42</time></span><div class='quote '>Понятно же, что результат будет зависеть от конкретики, и синтетические тесты ровным счётом ничего не покажут.</div></div><br>
Согласен. Безапелляционные утверждения о конкретном значении программного кэша (пресловутые 256к) - наводят туман&#33; :)</div></div><br>
Все забыли что в нормальной системе есть куча других параметров, и затрат,<br>
тем более в сервере с кастерами,  и несколькими БД .]]></description>
        <author>sergioK</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783995</guid>
        <pubDate>Thu, 29 Nov 2018 03:13:39 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783995</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>JoeUser</strong><br>
Про блоки я имел ввиду &quot;кэшированные&quot; тёмно синий цвет в мониторе ресурсов. <br>
За одно обратите внимание, что запись идёт от имени процесса system.<br>
<a class='tag-url' href='https://yadi.sk/d/cjt20Bfu3B7voi' target='_blank'>https://yadi.sk/d/cjt20Bfu3B7voi</a>]]></description>
        <author>Pavia</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783994</guid>
        <pubDate>Thu, 29 Nov 2018 01:06:57 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783994</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>Qraizer</strong>, сенкс, что не поленился :) Интересно, цифры конечно разные, но соотношения цифр на разных вариантах буферов - вполне похожи как в моем эксперименте.<br>
<br>
1) Первый эксперимент - кэш в 1 мег выигрывает у кэша в 256к<br>
2) Второй эксперимент с кэшем в 256к и 16 мегами - дает максимальную общую производительность проги<br>
3) Последний эксперимент - что творит венда с записью на USB с обоими кэшами по 16 мег, только ей известно<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T21:42:24+00:00">28.11.18, 21:42</time></span><div class='quote '>Понятно же, что результат будет зависеть от конкретики, и синтетические тесты ровным счётом ничего не покажут.</div></div><br>
Согласен. Безапелляционные утверждения о конкретном значении программного кэша (пресловутые 256к) - наводят туман&#33; :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783993</guid>
        <pubDate>Wed, 28 Nov 2018 21:42:24 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783993</link>
        <description><![CDATA[Qraizer: Чуток подправил для одновременного запуска на разных объёмах буферов. За неимением POSIX-а переиначил потоки и время на плюсовые std:: аналоги. Тестил на SATAшных терабайтниках.<br>
Регулар:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Using 262144 and 1048576 len buffers: &nbsp; delta two: 22.642 sec | delta one: 24.108 sec</div><div class="code_line">Using 262144 and 16777216 len buffers: &nbsp;delta one: 13.658 sec | delta two: 23.652 sec</div><div class="code_line">Using 262144 and 536870912 len buffers: delta one: 10.679 sec | delta two: 33.190 sec</div><div class="code_line">Using 262144 and 524288 len buffers: &nbsp; &nbsp;delta one: 23.556 sec | delta two: 24.215 sec</div><div class="code_line">Using 262144 and 262144 len buffers: &nbsp; &nbsp;delta one: 24.640 sec | delta two: 24.889 sec</div><div class="code_line">Using 16777216 and 16777216 len buffers:delta one: 24.022 sec | delta two: 24.270 sec</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Энкриптед:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Using 262144 and 1048576 len buffers: &nbsp; delta two: 24.068 sec | delta one: 24.511 sec</div><div class="code_line">Using 262144 and 16777216 len buffers: &nbsp;delta one: 13.193 sec | delta two: 22.704 sec</div><div class="code_line">Using 262144 and 536870912 len buffers: delta one: 10.568 sec | delta two: 32.802 sec</div><div class="code_line">Using 262144 and 524288 len buffers: &nbsp; &nbsp;delta one: 24.850 sec | delta two: 25.351 sec</div><div class="code_line">Using 262144 and 262144 len buffers: &nbsp; &nbsp;delta one: 23.470 sec | delta two: 23.867 sec</div><div class="code_line">Using 16777216 and 16777216 len buffers:delta one: 23.279 sec | delta two: 23.809 sec</div></ol></div></div></div></div><br>
Сомпрессед:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Using 262144 and 1048576 len buffers: &nbsp; delta two: 30.661 sec | delta one: 34.824 sec</div><div class="code_line">Using 262144 and 16777216 len buffers: &nbsp;delta two: 20.858 sec | delta one: 46.974 sec</div><div class="code_line">Using 262144 and 536870912 len buffers: delta one: 40.822 sec | delta two: 53.165 sec</div><div class="code_line">Using 262144 and 524288 len buffers: &nbsp; &nbsp;delta one: 45.717 sec | delta two: 59.511 sec</div><div class="code_line">Using 262144 and 262144 len buffers: &nbsp; &nbsp;delta two: 58.195 sec | delta one: 63.441 sec</div><div class="code_line">Using 16777216 and 16777216 len buffers:delta two: 30.491 sec | delta one: 31.853 sec</div></ol></div></div></div></div>Понятно, что время на упакованных файликах будет очень разниться в зависимости от их контента.<br>
Не понимаю, об чём сыр-бор. Понятно же, что результат будет зависеть от конкретики, и синтетические тесты ровным счётом ничего не покажут. Для полноты экспериментов нужно ещё пробовать флажочки из WinAPI.<br>
Для фана регулар на 4Г флэшке (NTFS):<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Using 262144 and 1048576 len buffers: &nbsp; delta two: 95.395 sec | delta one: 152.316 sec</div><div class="code_line">Using 262144 and 16777216 len buffers: &nbsp;delta two: 118.955 sec| delta one: 182.474 sec</div><div class="code_line">Using 262144 and 536870912 len buffers: delta two: 155.706 sec| delta one: 157.165 sec</div><div class="code_line">Using 262144 and 524288 len buffers: &nbsp; &nbsp;delta two: 378.902 sec| delta one: 415.027 sec</div><div class="code_line">Using 262144 and 262144 len buffers: &nbsp; &nbsp;delta one: 258.895 sec| delta two: 259.765 sec</div><div class="code_line">Using 16777216 and 16777216 len buffers:delta two: 87.787 sec | delta one: 152.773 sec</div></ol></div></div></div></div>Пришлось уменьшить размер файлов вдвое, иначе не вмещались. Флешка оптимизирована на производительность, так что запись кешировалась. Полный алес по времени. Видимо, понимая медленность устройства, винда пыталась кешировать, пока был резон хавать память под кеш, но потом-таки сдалась.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783991</guid>
        <pubDate>Wed, 28 Nov 2018 19:51:37 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783991</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783990'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>sergioK &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T19:22:43+00:00">28.11.18, 19:22</time></span><div class='quote '>Потоков лучше всего столько, сколько ядер на машине. </div></div><br>
Это когда ядра есть чем занять по вычислениям.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783990</guid>
        <pubDate>Wed, 28 Nov 2018 19:22:43 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783990</link>
        <description><![CDATA[sergioK: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783985'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T17:33:47+00:00">28.11.18, 17:33</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T17:00:41+00:00">28.11.18, 17:00</time></span><div class='quote '>Жесткий запроектированы на временное разделение для 4 потоков. Поэтому 2-х недостаточно.</div></div><br>
Кто и кем запроектирован для 4-х потоков и почему 2 недостаточно?</div></div><br>
Потоков лучше всего столько, сколько ядер на машине.]]></description>
        <author>sergioK</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783985</guid>
        <pubDate>Wed, 28 Nov 2018 17:33:47 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783985</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T17:00:41+00:00">28.11.18, 17:00</time></span><div class='quote '>Дело в том, что ProcessExplorer считает данные блоки как Free.</div></div><br>
Я раскрывал свойство запущенной программы, открывал вкладку Threads и смотрел сколько CPU в % отъедает каждая работающая нить.<br>
Какие такие блоки??? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T17:00:41+00:00">28.11.18, 17:00</time></span><div class='quote '>А про-то что вводит в заблуждение. </div></div><br>
Ну да, хотя давно уже пора запомнить, больше - не значит лучше :lol: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T17:00:41+00:00">28.11.18, 17:00</time></span><div class='quote '>Жесткий запроектированы на временное разделение для 4 потоков. Поэтому 2-х недостаточно.</div></div><br>
Кто и кем запроектирован для 4-х потоков и почему 2 недостаточно?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783982'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T17:00:41+00:00">28.11.18, 17:00</time></span><div class='quote '>Во-вторых я не понимаю чего вы ожидаете увидеть?</div></div><br>
Какой из потоков с соответствующим размером буфера умудриться свои данные записать быстрее. Потом подумалось об общем быстродействии - что также немаловажно.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783982</guid>
        <pubDate>Wed, 28 Nov 2018 17:00:41 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783982</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>JoeUser</strong><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783979'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T15:48:16+00:00">28.11.18, 15:48</time></span><div class='quote '>Смысл в том, чтобы каждый из потоков работал не в &quot;тепличных&quot; условиях, а в условиях конкуренции. Два мне показалось для обеспечения конкуренции достаточным.</div></div><br>
Жесткий запроектированы на временное разделение для 4 потоков. Поэтому 2-х недостаточно.<br>
Во-вторых я не понимаю чего вы ожидаете увидеть?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783979'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T15:48:16+00:00">28.11.18, 15:48</time></span><div class='quote '>Нет. На на пару тестах, во время их работы, я открывал ProcessExplorer и смотрел загрузку проца нитями - была на протяжении всей записи, но от 1% до 5% максимум.</div></div><br>
Дело в том, что ProcessExplorer  считает данные блоки как Free. Просто запустите несколько процессов 32-битных или 64 битных которые съедят всю свободную память и данамика записи изменится у вас правда она не отображается. Но на скорость это тоже повлияет.<br>
 <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783979'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T15:48:16+00:00">28.11.18, 15:48</time></span><div class='quote '>Да нет, все верно </div></div><br>
Так я не про то, что верно не верно. А про-то что вводит в заблуждение. Как на картинах intel vs amd.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><img class='tag-img' src='https://tehnobzor.ru/wp-content/uploads/2017/05/amd-ryzen-1600x-8-1.jpg' alt='user posted image'> </div></div>]]></description>
        <author>Pavia</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783979</guid>
        <pubDate>Wed, 28 Nov 2018 15:48:16 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783979</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T13:29:20+00:00">28.11.18, 13:29</time></span><div class='quote '>)У вас процессор отрабатывает за 10 секунд пересылку в буфер ОС. Win7 и далее используют всю свободную память под дисковый кэш. А далее виндоус медленно записывает на диск.</div></div><br>
Нет. На на пару тестах, во время их работы, я открывал ProcessExplorer и смотрел загрузку проца нитями - была на протяжении всей записи, но от 1% до 5% максимум.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T13:29:20+00:00">28.11.18, 13:29</time></span><div class='quote '>Вы табличку неправильно нарисовали. У вас же не скорость в ней, а время. Поэтому не ухудшается, а улучшается.<br>
Во-вторых график надо строить не столбчатый, а трёх мерный с вариацией размеров буферов иначе тренд непонятен.</div></div><br>
Да нет, все верно - пара столбцов под один вариант буфферов, следующая пара - под другой, и т.д. - лучший вариант меньший. Помимо того &quot;серая&quot; линия показывает &quot;общее время программы&quot; (иными словами максимально-бОльшее время работы одного из потоков). Аналогично - меньшее время = лучший результат.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T13:29:20+00:00">28.11.18, 13:29</time></span><div class='quote '>Судя повсему в обоих таблицам скорость 1 и 2 перепутаны с 1 и 2 буфером.</div></div><br>
Ничего не перепутано&#33; Я времена снимал с &quot;Delta ...:&quot;. Да, в некоторых случаях второй поток (второй, бОльший буфер) успевал отписываться первым, т.к. завершал раньше. Я все это учитывал.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T13:29:20+00:00">28.11.18, 13:29</time></span><div class='quote '>В чём смысл двух потоков? Почему не 4 или 5?</div></div><br>
Смысл в том, чтобы каждый из потоков работал не в &quot;тепличных&quot; условиях, а в условиях конкуренции. Два мне показалось для обеспечения конкуренции достаточным.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T13:29:20+00:00">28.11.18, 13:29</time></span><div class='quote '>Кстати у вас вывод printf(&quot;Delta One: не синхротронный и там буквы да и цифры должны плясать чёрти как. </div></div><br>
В моем тесте такого в 99.9% быть не может - т.к. разница между выводами на много больше скорости вывода на консоль, более того - саму еще буферезированную. Кстати - код я привел, можно у себя проверить. Я собирал с помощью gcc version 5.3.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project).]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783961</guid>
        <pubDate>Wed, 28 Nov 2018 13:29:20 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783961</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>JoeUser</strong><br>
1)У вас процессор отрабатывает за 10 секунд пересылку в буфер ОС. Win7 и далее используют всю свободную память под дисковый кэш. <br>
А далее виндоус медленно записывает на диск.<br>
Так что с тем что винда, как хочет так и рулит согласен. <br>
2)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783951'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T11:53:42+00:00">28.11.18, 11:53</time></span><div class='quote '> общее быстродействие программы ухудшается</div></div><br>
Вы табличку неправильно нарисовали. У вас же не скорость в ней, а время. Поэтому не ухудшается, а улучшается.<br>
Во-вторых график надо строить не столбчатый, а трёх мерный с вариацией размеров буферов иначе тренд непонятен.<br>
<br>
В чём смысл двух потоков? Почему не 4 или 5?<br>
<br>
3) Чем удивляет? <br>
Судя повсему в обоих таблицам скорость 1 и 2 перепутаны с 1 и 2 буфером.<br>
Кстати у вас вывод printf(&quot;Delta One:  не синхротронный и там буквы да и цифры должны плясать чёрти как.]]></description>
        <author>Pavia</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783951</guid>
        <pubDate>Wed, 28 Nov 2018 11:53:42 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783951</link>
        <description><![CDATA[JoeUser: Странно это все, очень странно&#33; :-? <br>
<br>
Написал прогу на Си для тестирования различных вариантов буферизированной записи. Тестирование проводил на &quot;живой ОС Win 10x64&quot;, т.е. не на виртуальной машине. Сама система крутится на материнском RAID-0 (fake RAID). Запись проводил на дополнительно подключенный HDD c SATA 6Gb/s на интерфейс компа SATA III, и потом другой HDD по USB 3.0. Комп на базе Intel Core i7-3770K, 3.5GHz, 8GB RAM. Для более реальных, как мне показалось, условий - писал в два конкурирующих за I/O (вернее за запись) потока.<br>
<br>
Вот код:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;stdlib.h&#62;</div><div class="code_line">#include &#60;time.h&#62;</div><div class="code_line">#include &#60;pthread.h&#62;</div><div class="code_line">#include &#60;unistd.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#define BUFF_LEN_ONE 256*1024</div><div class="code_line">#define BUFF_LEN_TWO 1*1024*1024</div><div class="code_line">&nbsp;</div><div class="code_line">void* Write256KB(void* buff) {</div><div class="code_line">&nbsp;&nbsp;FILE *fd;</div><div class="code_line">&nbsp;&nbsp;struct timespec start, stop;</div><div class="code_line">&nbsp;&nbsp;clock_gettime (CLOCK_REALTIME, &amp;start);</div><div class="code_line">&nbsp;&nbsp;if ((fd = fopen(&quot;F:/one.bin&quot;, &quot;wb&quot;)) == NULL) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;perror(&quot;Cannot open file one.bin&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return NULL;</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;&nbsp;setvbuf(fd, (char *)buff, _IOFBF, BUFF_LEN_ONE);</div><div class="code_line">&nbsp;&nbsp;for (long int i=0; i&#60;128*1024*1024; ++i) fputs(&quot;0123456789ABCDEF&quot;,fd);</div><div class="code_line">&nbsp;&nbsp;fflush(fd); /** в принципе не надо **/</div><div class="code_line">&nbsp;&nbsp;fclose(fd);</div><div class="code_line">&nbsp;&nbsp;clock_gettime (CLOCK_REALTIME, &amp;stop);</div><div class="code_line">&nbsp;&nbsp;printf (&quot;Delta One: %lu.%lu sec\n&quot;,stop.tv_sec - start.tv_sec,stop.tv_nsec - start.tv_nsec);</div><div class="code_line">&nbsp;&nbsp;return NULL;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void* Write32MB(void* buff) {</div><div class="code_line">&nbsp;&nbsp;FILE *fd;</div><div class="code_line">&nbsp;&nbsp;struct timespec start, stop;</div><div class="code_line">&nbsp;&nbsp;clock_gettime (CLOCK_REALTIME, &amp;start);</div><div class="code_line">&nbsp;&nbsp;if ((fd = fopen(&quot;F:/two.bin&quot;, &quot;wb&quot;)) == NULL) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;perror(&quot;Cannot open file two.bin&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return NULL;</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;&nbsp;setvbuf(fd, (char *)buff, _IOFBF, BUFF_LEN_TWO);</div><div class="code_line">&nbsp;&nbsp;for (long int i=0; i&#60;128*1024*1024; ++i) fputs(&quot;0123456789ABCDEF&quot;,fd);</div><div class="code_line">&nbsp;&nbsp;fflush(fd); /** в принципе не надо **/</div><div class="code_line">&nbsp;&nbsp;fclose(fd);</div><div class="code_line">&nbsp;&nbsp;clock_gettime (CLOCK_REALTIME, &amp;stop);</div><div class="code_line">&nbsp;&nbsp;printf (&quot;Delta Two: %lu.%lu sec\n&quot;,stop.tv_sec - start.tv_sec,stop.tv_nsec - start.tv_nsec);</div><div class="code_line">&nbsp;&nbsp;return NULL;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;pthread_t one, two;</div><div class="code_line">&nbsp;&nbsp;void *buff_one, *buff_two;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;buff_one = malloc(BUFF_LEN_ONE);</div><div class="code_line">&nbsp;&nbsp;buff_two = malloc(BUFF_LEN_TWO);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (pthread_create(&amp;one, NULL, Write256KB, buff_one) != 0) perror(&quot;Pthread_create-1 fails&quot;);</div><div class="code_line">&nbsp;&nbsp;if (pthread_create(&amp;two, NULL, Write32MB, buff_two) != 0) perror(&quot;Pthread_create-2 fails&quot;);</div><div class="code_line">&nbsp;&nbsp;if (pthread_join(one,NULL) != 0) perror(&quot;Pthread_join-1 fails&quot;);</div><div class="code_line">&nbsp;&nbsp;if (pthread_join(two,NULL) != 0) perror(&quot;Pthread_join-2 fails&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Может с кодом че не так? Но результаты получились странные.<br>
Свел их в таблицы для наглядности:<br>
<br>
<span class="b-attach" data-size="25821" data-hits="429" data-attach-id="59534" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=59534' title='Скачать файл' target='_blank'>Screenshot_1.png</a> (, : 429)
		</span><span class="b-attach" data-size="26052" data-hits="477" data-attach-id="59535" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=59535' title='Скачать файл' target='_blank'>Screenshot_2.png</a> (, : 477)
		</span><br>
<br>
Выводы:<br>
<br>
1) Для программы с более одним потоком - операционная система рулит как хочет<br>
2) Для потоков желательно не использовать буфера равных размеров - общее быстродействие программы ухудшается<br>
3) Самый последний тест с равными размерами буферов для USB 3.0 удивляет<br>
<br>
Критикуйте. Что не так написал или где неправильный вывод сделал. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-11-28T11:58:39+00:00">28.11.18, 11:58</time></span></span><br>
ЗЫ: Каждый из тестов запускал по несколько прогонов, тупо чтобы убедиться, что цифры &quot;не пляшут&quot;. Как писал выше, с последним тестом с равными буферами для HDD USB - устойчивая разница. Везде разброс между запусками - доли секунды.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783935</guid>
        <pubDate>Wed, 28 Nov 2018 11:19:59 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783935</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783872'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T19:00:45+00:00">27.11.18, 19:00</time></span><div class='quote '>OpenGL, т.е. если диск может принять в свой кэш 64MБ, то все равно нужно забивать его мелкими порциями по 64КБ - и это будет по фэншую? А вот если установим свой программный кэш, к примеру в 16МБ, то получим (можем получить) просадку по скорости? </div></div><br>
Я когда-то экспериментировал, то получал, что начиная с некоторого совсем небольшого размера размер буфера перестаёт ускорять чтение-запись.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783913</guid>
        <pubDate>Wed, 28 Nov 2018 09:41:59 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783913</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783849'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T11:26:10+00:00">27.11.18, 11:26</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783843'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T10:19:14+00:00">27.11.18, 10:19</time></span><div class='quote '>Речь о том, что нет смысла делать буфер большой - 64 кб, например, за глаза и уши, а лучше и того меньше.</div></div><br>
Возникает резонный вопрос - зачем тогда HDD обеспечивают аппаратным кэшем в 64/32/16/8 MB?  :lol:</div></div><br>
А было время, когда этого не было.<br>
В этом случае, ЦП должен был сам, программно, управлять<br>
диском в реальном времени. Что не очень удобно, а в ситемах<br>
типа Виндус крайне не выгодно.<br>
(А я такие опыты производил в ситеме CPM/80. Писал процедуру<br>
форматирования дискеток)<br>
Поэтому в дивайсы стали устанавливать весьма интеллектуальные<br>
контроллеры, а связь с внешним миром организовали через <br>
общую память. Для того, чтобы максимальным образом<br>
разгрузить центральный процессор.<br>
-----<br>
Похожая эволюция затрагивает практически любые дивайсы.<br>
Например, сетевые карты. Видео-карты.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783890</guid>
        <pubDate>Wed, 28 Nov 2018 02:56:27 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783890</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>JoeUser</strong><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783872'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T19:00:45+00:00">27.11.18, 19:00</time></span><div class='quote '>то все равно нужно забивать его мелкими порциями по 64КБ - и это будет по фэншую?</div></div><br>
Когда я ставил эксперименты то оптимальным на чтение было 256КБ на запись 8МБ.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783872'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T19:00:45+00:00">27.11.18, 19:00</time></span><div class='quote '>А вот если установим свой программный кэш, к примеру в 16МБ, то получим (можем получить) просадку по скорости?</div></div><br>
Да проседает на проценты.]]></description>
        <author>Pavia</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783887</guid>
        <pubDate>Tue, 27 Nov 2018 21:15:53 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783887</link>
        <description><![CDATA[sergioK: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783843'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T10:19:14+00:00">27.11.18, 10:19</time></span><div class='quote '>Если жалкие проценты в быстродействии важны, то проще всего сделать размер буфера конфигурируемым, и на конкретной системе уже и выбирать наиболее подходящий размер.</div></div><br>
Жалкие проценты никого не волнуют, но размер буфера конфигурируемым я сделал,<br>
Дальше задача саппорта, буду делать stress test  с файлами 20-25Мега на неделе,<br>
выложу, благодарю за хинты,  Я пока stand by.]]></description>
        <author>sergioK</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783872</guid>
        <pubDate>Tue, 27 Nov 2018 19:00:45 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783872</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>OpenGL</strong>, т.е. если диск может принять в свой кэш 64MБ, то все равно нужно забивать его мелкими порциями по 64КБ - и это будет по фэншую? А вот если установим свой программный кэш, к примеру в 16МБ, то получим (можем получить) просадку по скорости? :blink:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783865</guid>
        <pubDate>Tue, 27 Nov 2018 16:55:50 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783865</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783849'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T11:26:10+00:00">27.11.18, 11:26</time></span><div class='quote '>зачем тогда HDD обеспечивают аппаратным кэшем в 64/32/16/8 MB?</div></div> Во-первых, при записи можно не ждать, когда установятся головки и под них подойдёт нужный блок, а записать данные в кэш и отчитаться, что операция выполнена. Реальную же запись выполнить, когда будет время.<br>
Во-вторых, если после этого сразу начнётся чтение, можно придержать данные в кэше, прочитать нужные данные, а потом уже выбирать время для записи.<br>
Можно накопить данные, и потом записать их в порядке, минимизирующем дёргание головок.<br>
Специально для тех, кто не понимает разницу между высокоуровневым чтением из программного буфера и низкоуровневым с диска (встречал и такое), и пытающимся читать данные с диска по одному байту, можно не гонять головку к нужному блоку, а выдавать его прямо из памяти, уменьшив замедление работы с 1000 раз и более всего до 10.<br>
Поскольку файлы хранятся на диске по-кластерно, а некоторые даже иногда подвергают диск дефрагментации, можно прочитать дорожку до конца в кэш, и заняться другими делами, по запросам выдавая уже прочитанные блоки.<br>
Ну и последнее, многие не знают, но на современных дисках размер блока уже довольно давно не равен 512 байт (у меня в компе размер блока равен 4096 - 8 логических блоков, определяется при сбоях). Более того, реальные кластеры часто пересекают границы физических блоков на диске, и даже переходят с дорожки на дорожку. Чтобы сделать вид, что блок по-прежнему равен 512 байт. Приходится при чтении разбивать физические блоки на логические в кэше, а при записи собирать их обратно.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783849</guid>
        <pubDate>Tue, 27 Nov 2018 11:26:10 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783849</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783843'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T10:19:14+00:00">27.11.18, 10:19</time></span><div class='quote '>Речь о том, что нет смысла делать буфер большой - 64 кб, например, за глаза и уши, а лучше и того меньше.</div></div><br>
Возникает резонный вопрос - зачем тогда HDD обеспечивают аппаратным кэшем в 64/32/16/8 MB?  :lol:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783843</guid>
        <pubDate>Tue, 27 Nov 2018 10:19:14 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783843</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783840'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T09:18:01+00:00">27.11.18, 09:18</time></span><div class='quote '>Ну выше же писали уже, мол блочное чтение/запись увеличивает на порядок скорость, нежели посимвольное чтение. </div></div><br>
Давай ты не будешь додумывать то, что я не говорил. О том, что посимвольное чтение медленней буферизованного никто не спорит. Речь о том, что нет смысла делать буфер большой - 64 кб, например, за глаза и уши, а лучше и того меньше. Увеличение его размера не только не приведёт к ускорению, но даже замедлить чтение может. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-11-27T10:20:39+00:00">27.11.18, 10:20</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783840'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T09:18:01+00:00">27.11.18, 09:18</time></span><div class='quote '>По-моему так: коль ТС заговорил о быстродействии - значит любой лучший результат существенен.</div></div><br>
Если жалкие проценты в быстродействии важны, то проще всего сделать размер буфера конфигурируемым, и на конкретной системе уже и выбирать наиболее подходящий размер.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783840</guid>
        <pubDate>Tue, 27 Nov 2018 09:18:01 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783840</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783834'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T06:50:57+00:00">27.11.18, 06:50</time></span><div class='quote '>Дай пруф на существенность что ли. </div></div><br>
Ну выше же писали уже, мол блочное чтение/запись увеличивает <strong class='tag-b'>на порядок</strong> скорость, нежели посимвольное чтение. Если доверия нет - напиши короткий тест. Я давно это проверял, и помню хорошо. Еще писамши на Virtual Pascal&#39;е. Тут сравнивается заведомо худший вариант с &quot;каким-то&quot;, путь удовлетворительным. И разница видна.<br>
<br>
А вот дальше нужно определиться с понятием &quot;существенно&quot;. Это от задачи к задаче, ИМХО. В два раза - это существенно? А на 5% быстрее, существенно?<br>
<br>
По-моему так: коль ТС заговорил о быстродействии - значит любой лучший результат существенен. Ну как-то так.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783834</guid>
        <pubDate>Tue, 27 Nov 2018 06:50:57 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783834</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783832'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T06:34:31+00:00">27.11.18, 06:34</time></span><div class='quote '>Она уменьшит количество операций с контроллером винта. </div></div><br>
Дай пруф на существенность что ли.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783832</guid>
        <pubDate>Tue, 27 Nov 2018 06:34:31 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783832</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783830'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2018-11-27T06:16:44+00:00">27.11.18, 06:16</time></span><div class='quote '>Вообще-то он прав - не нужно делать больше, чем размер кластера. Да и асинхронность тут никаким боком - она не уменьшит время, проходящее с момента запуска начала чтения до его конца. </div></div><br>
Она уменьшит количество операций с контроллером винта. А это существенно.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783830</guid>
        <pubDate>Tue, 27 Nov 2018 06:16:44 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783830</link>
        <description><![CDATA[OpenGL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783694'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T14:22:04+00:00">24.11.18, 14:22</time></span><div class='quote '>2) Amk, твое &quot;ведь пока буфер заполняется, программа ждёт, и ничего не делает. По крайней мере нет смысла делать его больше, чем дорожка диска (128 кБ).&quot; - шедевр безалаберности&#33; Ты уж извини ... Про асинхронность помним, не? Отдали винту &quot;порцию&quot;, не ждем ответа - работаем дальше. Давай вместе почитаем?</div></div><br>
Вообще-то он прав - не нужно делать больше, чем размер кластера. Да и асинхронность тут никаким боком - она не уменьшит время, проходящее с момента запуска начала чтения до его конца.]]></description>
        <author>OpenGL</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783792</guid>
        <pubDate>Mon, 26 Nov 2018 12:45:10 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783792</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783700'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T15:21:31+00:00">24.11.18, 15:21</time></span><div class='quote '>Буфер записи для fputs/fwrite может быть любым. Вообще любым, всё равно данные из него просто переписываются в буфер управления файлом. <br>
Буфер записи для write тоже любой, лишь бы был кратен размеру блока системного файлового кэша. Система сама разберётся когда и что писать на диск.<br>
Буфер чтения для read тоже должен быть кратен блоку системного кэша. И, повторю, нет смысла делать его больше, чем непрерывная цепочка блоков в файле, никакого выигрыша по быстродействию не будет.</div></div><br>
я вот опять недавно разбирал старую программу для Виндус , и легко поднял<br>
производительность её отрезка с файловыми операциями на порядок (в 10 раз).<br>
Там чтение файла 200-300К происходило по-байтно.<br>
А если читать блоками 16К-32К (актуальное значение буфера - размер кластера, 4К)<br>
производительность выросла в 10 раз.<br>
---<br>
Как то раз я написал тест, для исследования зависимости скорости от размеров буфера<br>
с блочной операцией fread/fwrite. Основной выигрыш был, когда буфер достигал 4К.<br>
Дальше бонус растёт очень медленно, в том случае, если речь идёт о файлах огромных размеров.<br>
Просто за счёт уменьшения количества циклов и обращений к fread/fwrite. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-11-26T12:48:27+00:00">26.11.18, 12:48</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783765'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>sergioK &#064; <time class="tag-quote__quoted-time" datetime="2018-11-26T01:32:20+00:00">26.11.18, 01:32</time></span><div class='quote '>Всем спасибо но это была теория, что делать практически ?</div></div><br>
Проведи исследование.<br>
Возьми какой-нибудь огромный файл.<br>
И измеряй время его чтения, в зависимости от величины буфера.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783765</guid>
        <pubDate>Mon, 26 Nov 2018 01:32:20 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783765</link>
        <description><![CDATA[sergioK: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783696'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T14:41:04+00:00">24.11.18, 14:41</time></span><div class='quote '>Уже писал выше - как минимум размера аппаратного кэша. Но есть и третий момент, который забывают очень часто&#33;&#33;&#33; А именно - свободная память для ОС&#33;</div></div><br>
несколько гига хватит ? Асинхронность тоже ничего не даст, пока данные необработаны <br>
делать нечего, ну поставишь waitSingleThread, все поймут что крутой пацан  ;) so what is next?<br>
<br>
<br>
Всем спасибо но это была теория, что делать практически ? Ну я дам возможность <br>
размер буфера брать из конфига, и ловить оптимальный вариант методом try &amp;&amp; mistakes ? <br>
Что конкретно в коде писать ?.]]></description>
        <author>sergioK</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783700</guid>
        <pubDate>Sat, 24 Nov 2018 15:21:31 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783700</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783694'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T14:22:04+00:00">24.11.18, 14:22</time></span><div class='quote '>Про асинхронность помним, не? Отдали винту &quot;порцию&quot;, не ждем ответа - работаем дальше.</div></div> Я комментировал пост с вызовом fgets. Там никакой асинхронности в принципе быть не может. Так что вызываем функцию… и ждём.<br>
Впрочем для fgets выбор размера буфера определяется по-другому. Буфер должен быть больше, чем самая длинная строка в файле.<br>
Буфер записи для fputs/fwrite может быть любым. Вообще любым, всё равно данные из него просто переписываются в буфер управления файлом. <br>
Буфер записи для write тоже любой, лишь бы был кратен размеру блока системного файлового кэша. Система сама разберётся когда и что писать на диск.<br>
Буфер чтения для read тоже должен быть кратен блоку системного кэша. И, повторю, нет смысла делать его больше, чем непрерывная цепочка блоков в файле, никакого выигрыша по быстродействию не будет. С другой стороны нежелательно делать его меньше читаемой за один раз порции данных. Если обработка идёт медленно по сравнению с чтением, то буфер можно вообще сделать примерно равным одной порции.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783694'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T14:22:04+00:00">24.11.18, 14:22</time></span><div class='quote '>Не поймите, плс, меня превратно - я не спец в этом вопросе, и код не &quot;выплюну&quot; на раз-два.</div></div> Вижу, поскольку &quot;выплёвывание&quot; кода тут вообще дело десятое. Всё зависит от того, какая система и куда идёт запись (откуда идет чтение). С некоторыми устройствами выгоднее вообще работать по-байтно.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783696</guid>
        <pubDate>Sat, 24 Nov 2018 14:41:04 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783696</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>sergioK</strong>, рекомендую тебе подход - системный&#33;<br>
<br>
В ближнем приближении - твоя &quot;система&quot; тупо состоит из двух блоков &quot;ввод&quot; и &quot;вывод&quot;. Количество там и там - роли не играет. Важен трансфер на входе и выходе. Берем &quot;вход&quot;, ты писал HTTP. Там существенным критерием есть MTU. Но он крошечный - единственный разумный, имхо, момент - делать буффер кратный ему. На счет блоков вывода - я бы смотрел в сторону аппаратных возможностей записи. Уже писал выше - как минимум размера аппаратного кэша. Но есть и третий момент, который забывают очень часто&#33;&#33;&#33; А именно - свободная память для ОС&#33; Если об этом не заботиться - ОС переходит в жесткий режим свопа - а это, в плане производительности, считай - &quot;обнять и плакать&quot;&#33; Таким образом, любые манипуляции с памятью не должны урезать разумные границы работы ОС. Это самое главное&#33;&#33;&#33; Оно - самое самое, и оно - самое главное&#33; Остальное - лайт тюнинг. Таковое мое ИМХО.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783695</guid>
        <pubDate>Sat, 24 Nov 2018 14:26:34 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783695</link>
        <description><![CDATA[sergioK: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413817&view=findpost&p=3783693'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T13:32:31+00:00">24.11.18, 13:32</time></span><div class='quote '>Но, для того, чтобы получить существенный выигрыш, недостаточно задавать буфер в вызовах функций fread/fwrite. Надо задать размер внутреннего буфера файла, используемого низкоуровневыми read/write.</div></div><br>
А как знать какой размер внутреннего буфера файла? <br>
У меня java, выглядит это <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;InputStream inputStream = request.getInputStream();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bufferedReader = new BufferedReader(new InputStreamReader(inputStream));</div></ol></div></div></div></div> <br>
<br>
и потом <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;char[] charBuffer = new char[8*1024]</div><div class="code_line">&nbsp;&nbsp;while ((bytesRead = bufferedReader.read(charBuffer)) &#62; 0) {</div><div class="code_line">}</div></ol></div></div></div></div> <br>
Я его (файл ) парсю в HTTP handler, еще я знаю что это csv.<br>
Пока писать на C не могу(слишком много народу, фирма 1500человек, убеждать надо).<br>
дать 16 для Лины и 8 для окон, будет нормально?]]></description>
        <author>sergioK</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783694</guid>
        <pubDate>Sat, 24 Nov 2018 14:22:04 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783694</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>Славян</strong> и <strong class='tag-b'>amk</strong>, вы вроде челы продвинутые, на такие косяки порете&#33;  :lol: <br>
<br>
1) <strong class='tag-b'>Славян</strong>, возьми &quot;среднестатистический&quot; винт 10-й давности, там аппаратный кэш уже порядка 32 Mb&#33; А это значит - &quot;впилил и забыл&quot;, остальное дело микросхем. Вывод - &quot;пилить&quot; меньше, только электричество портить&#33;<br>
<br>
2) <strong class='tag-b'>Amk</strong>, твое &quot;ведь пока буфер заполняется, программа ждёт, и ничего не делает. По крайней мере нет смысла делать его больше, чем дорожка диска (128 кБ).&quot; - шедевр безалаберности&#33; Ты уж извини ... Про асинхронность помним, не? Отдали винту &quot;порцию&quot;, не ждем ответа - работаем дальше. <a class='tag-url' href='https://docs.microsoft.com/ru-ru/windows/desktop/FileIO/synchronous-and-asynchronous-i-o' target='_blank'>Давай вместе почитаем?</a><br>
<br>
Не поймите, плс, меня превратно - я не спец в этом вопросе, и код не &quot;выплюну&quot; на раз-два. Но, концептуально, я - в теме. И чуйка подсказывает, что вы неправы. Очень глубоко, в своих глубинах :lol:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783693</guid>
        <pubDate>Sat, 24 Nov 2018 13:32:31 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783693</link>
        <description><![CDATA[amk: На самом деле даже для относительно медленных жёстких дисков нет смысла слишком увеличивать размер буфера. Ведь пока буфер заполняется, программа ждёт, и ничего не делает. По крайней мере нет смысла делать его больше, чем дорожка диска (128 кБ). На само деле нет смысла делать его длиннее основной части непрерывных сегментов файла. Из-за этого для обычной последовательной обработки в современных операционных системах для современных же жёстких дисков обычно обходятся буфером размером в 4-64 КБ (Для винды покороче, для линукса подлиннее, обычно 16). Операционная система обнаружив, что программа читает файл последовательно с самого начала, сама считывает файл в кэш диска, и выдаёт порциями. При произвольном доступе имеет смысл делать буфер короче.<br>Увеличение размера буфера имеет смысл при копировании файлов в пределах одного физического носителя (с механическим доступом).<br>Но, для того, чтобы получить существенный выигрыш, недостаточно задавать буфер в вызовах функций fread/fwrite. Надо задать размер внутреннего буфера файла, используемого низкоуровневыми read/write.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783684</guid>
        <pubDate>Sat, 24 Nov 2018 10:22:48 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783684</link>
        <description><![CDATA[Славян: 1. Размер должен быть кратен степени двойки, коли сейчас почти все машины считают в двоичной, да и аппаратная поддержка, скорее всего, этим пользуется.<br>2. Не надо размер в несколько мегабайт (не больше), т.к. старые машины могут не найти столько памяти, а делать желательно для бо́льшего количества применений.<br>3. Главное: размер должен быть таков, чтобы время на количество вызовов функций для чтения (с учётом времени на вызов каждой) было незначительно в сравнении с временем чтения данных. Так, для SSD, скажем, желательно делать вызовов поменьше, ибо они данные читают шибче. Впрочем, предел=идеал всё равну будет манить: только 1 вызов. В то же время, если вдруг делаете попытки чтения битых файлов, то запросто может оказаться, что лучше наделать кучу микровызовов (чтобы хоть что-то прочитать), нежели всего один, кой скажет, что неудача,... и адью. :whistle:]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783679</guid>
        <pubDate>Sat, 24 Nov 2018 09:14:01 +0000</pubDate>
        <title>FileBufferReader</title>
        <link>https://forum.sources.ru/index.php?showtopic=413817&amp;view=findpost&amp;p=3783679</link>
        <description><![CDATA[sergioK: Язык не важно какой, важна суть, читаем большой файл (10-50МБ) а может и больше <br>
пример для понятности на &quot;проклятом&quot; всеми чистом C,<br>
просьба холиваров  на темы C++ лучше, не разводить,  ;) тут это не важно.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;char buf[1024*512];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;while (fgets(buf, sizeof(buf), fp) != NULL)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;buf[strlen(buf) - 1] = &#39;{text}&#39;; // eat the newline fgets() stores</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;%s\n&quot;, buf);</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div>,<br>
<br>
Как подбирать оптимальный размер баффера? почему .5мега а не 2 или 10?<br>
Данные приходят по сети, обычным HTTP, В сети гуглил толком ничего по сути<br>
не нашел, какие варианты  ;)]]></description>
        <author>sergioK</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	