<?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=415871&amp;view=findpost&amp;p=3811447</guid>
        <pubDate>Mon, 30 Sep 2019 09:08:07 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811447</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811405'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-09-28T16:25:00+03:00">28.09.19, 13:25</time></span><div class='quote '><strong class='tag-b'>ЫукпШ</strong>, стоп-стоп-стоп. Не забываем что у современных HDD есть аппаратный буфер порядка 32Mb и технологии упреждающего чтения и отложенной записи.</div></div><br>
По моему, это &quot;ни о чём&quot;.<br>
Эти средствами пользуется сам HDD.<br>
Далее идёт система, в которой много процессов и потоков.<br>
Наш номер тут 48, и рассчитывать на это нечего.]]></description>
        <author>ЫукпШ</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811405</guid>
        <pubDate>Sat, 28 Sep 2019 13:25:00 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811405</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>ЫукпШ</strong>, стоп-стоп-стоп. Не забываем что у современных HDD есть аппаратный буфер порядка 32Mb и технологии упреждающего чтения и отложенной записи. Так что чтение-запись уже явно не килобайтами.]]></description>
        <author>JoeUser</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811403</guid>
        <pubDate>Sat, 28 Sep 2019 12:42:40 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811403</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811402'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-09-28T11:51:59+00:00">28.09.19, 11:51</time></span><div class='quote '>Для одиночного HDD - скорее всего нужен один &quot;читатель&quot; и один &quot;писатель&quot;.<br>
Да и &quot;читателю&quot; давать приоритет, писать при простое чтения или при скором <br>
переполнении переменной-буффера записи.</div></div><br>
Например, так:<br>
1. Одному Читателю дали буфер 128К, другому - 192К<br>
2. Писателю дали 288К<br>
Хотя я подозреваю, что это не обязательно, но не трудно и можно попробовать.<br>
<br>
3. Нам известно, что данные файлов уже отсортированы. Допустим, сначала - &quot;минимум&quot;.<br>
4. читаем строку читателя 1 и строку читателя 2. <br>
5. Сравниваем.<br>
6. Писатель пишет минимум в результат.<br>
7. Из читателя, данные которого пошли в результат, добываем ещё строку.<br>
8. К пункту 5.<br>
---<br>
Приблизительно так, можно слить 2 файла в один.<br>
Вот и всё.<br>
Делаем так, пока не останется один файл.]]></description>
        <author>ЫукпШ</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811402</guid>
        <pubDate>Sat, 28 Sep 2019 11:51:59 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811402</link>
        <description><![CDATA[JoeUser: Для одиночного HDD - скорее всего нужен один &quot;читатель&quot; и один &quot;писатель&quot;.<br>Да и &quot;читателю&quot; давать приоритет, писать при простое чтения или при скором <br>переполнении переменной-буффера записи.]]></description>
        <author>JoeUser</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811400</guid>
        <pubDate>Sat, 28 Sep 2019 11:38:15 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811400</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811399'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-09-28T11:32:49+00:00">28.09.19, 11:32</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811351'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-09-26T11:54:42+00:00">26.09.19, 11:54</time></span><div class='quote '>Может получиться &quot;вечный кайф&quot;.</div></div><br>
Это справедливо для единственного HDD. <br>
Для RAID-массива и SSD картина будет другая.</div></div><br>
Да. Но как сложаться обстоятельства в конкретной системе<br>
в конкретное время не известно заранее.<br>
---<br>
Один раз я подобное видел и хотел посмотреть, чем закончится.<br>
После около 4-5 часов &quot;наблюдений&quot; просто надоело.]]></description>
        <author>ЫукпШ</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811399</guid>
        <pubDate>Sat, 28 Sep 2019 11:32:49 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811399</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811351'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2019-09-26T11:54:42+00:00">26.09.19, 11:54</time></span><div class='quote '>Может получиться &quot;вечный кайф&quot;.</div></div><br>
Это справедливо для единственного HDD. <br>
Для RAID-массива и SSD картина будет другая.]]></description>
        <author>JoeUser</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811392</guid>
        <pubDate>Fri, 27 Sep 2019 22:26:27 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811392</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811359'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MIF &#064; <time class="tag-quote__quoted-time" datetime="2019-09-26T13:37:45+00:00">26.09.19, 13:37</time></span><div class='quote '>Читаем полностью файл, парсим и пишем в таблицу базы данных с “правильными» индексами.</div></div><br>
А как рассчитать эти &quot;правильные&quot; индексы ?<br>
Алгоритмы сортировки этого не делают.<br>
Они сравнивают два объекта в соответствии<br>
с критерием и меняют местами в массиве.<br>
Индексы массива выбираются в соответствии с алгоритмом<br>
сортировки.<br>
---<br>
Можно попытаться изобрести число, соответствующее значимости объекта.<br>
Тогда &quot;да&quot;. Можно будет в индексном массиве указать файл, строку, число.<br>
Сразу просится простой вариант - рассматриваем код символа как<br>
коэф. числа в системе счисления. Если код символа выбираем в пределах<br>
0-255, тогда это система счисления по основанию 256.<br>
Ещё надо знать максимальный размер строки и быть уверенным, что разрядной<br>
сетки целого числа хватит для вычисления максимального значения.<br>
Тогда может получится - для каждой строки можно точно вычислить её &quot;вес&quot;.<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="2019-09-27T22:41:19+00:00">27.09.19, 22:41</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811361'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FateFlex &#064; <time class="tag-quote__quoted-time" datetime="2019-09-26T13:39:12+00:00">26.09.19, 13:39</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811236'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T19:27:38+00:00">24.09.19, 19:27</time></span><div class='quote '>Он подгружает столько сколько вы укажите. Обычно это 4 или 8 кб, реже 64 кб.</div></div>А как это задать?</div></div><br>
Можно так:<br>
1. Для чтения файла делаем специальный объект - нам понадобяться<br>
не только методы, но и свойства.<br>
2. Будем использовать - &quot;число байт в буфере&quot;, &quot;индекс-указатель на актуальный байт&quot;.<br>
3. При создании объекта будем указывать размер буфера чтения.<br>
Для удобства предусмотрим установку параметра по умолчанию. <br>
3. Открываем фал на чтение - объём считанного в буфере - 0, индекс 0.<br>
4. Имеется метод типа &quot;GetByte&quot;.<br>
5. Просто вызываем его. Он работает так:<br>
 Проверим наличие данных в буфере - если данные есть, читаем 1 байт из буфера, уменьшаем<br>
значение &quot;число байт в буфере&quot;, увеличиваем &quot;индекс-указатель на актуальный байт&quot;.<br>
Если данных нет, читаем из файла порцию, равную размеру буфера, для его<br>
полного заполнения. По результатам устанавливаем переменные<br>
&quot;число байт в буфере&quot;=(действительно считанное),<br>
 &quot;индекс-указатель на актуальный байт&quot;=0<br>
6. Так читаем и обрабатываем весь файл.<br>
7. Если надо читать строки или другие &quot;порции&quot;, используем методы на основе &quot;GetByte&quot;.<br>
---<br>
С таким объектом удобно проводить опыты по определению максимальной скорости работы<br>
от величины буфера.<br>
---<br>
Для записи в файл делаем аналогичный алгоритм.<br>
Т.е. пишем не в файл и не в буфер. Пишем в &quot;объект&quot;.<br>
Который сам решает, когда весь имеющийся буфер с данными сбрасывать на диск.<br>
---<br>
Оба варианта я реализовал, постоянно пользуюсь, работает отлично.<br>
Плюс особенно хорошо заметен на &quot;слабых&quot; системах.]]></description>
        <author>ЫукпШ</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811361</guid>
        <pubDate>Thu, 26 Sep 2019 13:39:12 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811361</link>
        <description><![CDATA[FateFlex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811236'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T19:27:38+00:00">24.09.19, 19:27</time></span><div class='quote '>Он подгружает столько сколько вы укажите. Обычно это 4 или 8 кб, реже 64 кб.</div></div>А как это задать? Поверхностный гуглинг ничего не дал, ключевые слова подскажите хотя бы :huh:]]></description>
        <author>FateFlex</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811359</guid>
        <pubDate>Thu, 26 Sep 2019 13:37:45 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811359</link>
        <description><![CDATA[MIF: А если попробовать не изобретать велосипед, а взять напрокат?<br>Читаем полностью файл, парсим и пишем в таблицу базы данных с “правильными» индексами. Повторяем чтение остальных файлов. <br>В таблице данные расположены упорядоченно.]]></description>
        <author>MIF</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811351</guid>
        <pubDate>Thu, 26 Sep 2019 11:54:42 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811351</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811243'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T20:53:40+00:00">24.09.19, 20:53</time></span><div class='quote '>Я бы создал 10 потоков, которые обслуживают по 100 фалов. &quot;Обслуживают&quot; - это значит подгружают по необходимости пулы записей в своих 100 стеках. M-потокв занимается выборкой &quot;вершин&quot; стеков и их упорядочиванием.</div></div><br>
Может получиться &quot;вечный кайф&quot;.<br>
Даже если предположить, что все файлы не фрагментированы,<br>
всё равно, при одновременном чтении больших файлов из разных<br>
потоков будут активно использоваться движения блока головок диска.<br>
Т.е. возможна ситуация, когда некий файл начали читать, система<br>
прервала поток, передала время другому. Его файлы &quot;далеко&quot;, потащили<br>
туда блок головок электро-механической операцией. Начали читать, и опять.<br>
Поток прерван, другой поток хочет почитать файлы, которые &quot;далеко&quot;.<br>
---<br>
При такой реализации будет истрачено много времени из-за медленных операций<br>
электро-механики.<br>
я бы постарался обойтись одним рабочим потоком.]]></description>
        <author>ЫукпШ</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811343</guid>
        <pubDate>Thu, 26 Sep 2019 07:55:32 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811343</link>
        <description><![CDATA[FateFlex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811226'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T17:14:07+00:00">24.09.19, 17:14</time></span><div class='quote '>Он подгружает столько сколько вы укажите.</div></div>Попробую увеличить до мегабайта.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811226'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T17:14:07+00:00">24.09.19, 17:14</time></span><div class='quote '>Так вы ОС говорите перемести головку 1000 раз и каждый раз в разное место и так по кругу.</div></div>С точки зрения железа не подумал :huh: у меня 8 процессов каждый свои условные 1000 файлов объединяют :crazy: для винта это ад похоже. Буду последовательно файлы читать.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811240'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T20:37:33+00:00">24.09.19, 20:37</time></span><div class='quote '>Я уж не говорю о том, что гарантии, что все файлы нефрагментированы и лежат последовательно, отсутствует как класс.</div></div>По счастливому совпадению, как раз так, все лежат друг за другом и не фрагментированы.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811243'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T20:53:40+00:00">24.09.19, 20:53</time></span><div class='quote '>Что значит &quot;массивов&quot;?</div></div>Данные лежат в виде наборов char и long - это не одинаковые структуры, поэтому весь файл в память без парсинга прочитать нельзя, поэтому как текстовый файл его лучше воспринимать.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811243'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T20:53:40+00:00">24.09.19, 20:53</time></span><div class='quote '>Если задача не периодическая - нафик оптимизацию.</div></div>Почти не периодическая, но в реальности это около 10.000 файлов от 1 Mb до 100 Gb, поэтому придётся съесть очень много суши, запить бассейном и завалиться как спящая красавица.<br>
<br>
Значит выбор между числом проходов сортировки и числом циклов чтения.]]></description>
        <author>FateFlex</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811243</guid>
        <pubDate>Tue, 24 Sep 2019 20:53:40 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811243</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>FateFlex</strong>, и я пожалуй вставлю своих пять копеек ... Задача поставлена нечетко&#33;&#33;&#33;<br>
Что значит &quot;массивов&quot;??? Если файлы текстовые - это один колинкор, если файлы имеют записи равной длины - это второй. В первом случае я бы порекомендовал провести предварительную индексацию (смещение+длина), в втором случае я бы порекомендовл прислушаться к советам Анины... С маленькими дополнениями. А именно:<br>
<br>
1) Не забирать у ОС более 85% оперативы - она это не любит, и начинает в панике сбрасывать страницы на диск (различные), типа на упреждение. А мой выбор вааще 50% и не выше. Да и смысл????&#33;&#33;&#33; Дисковая подсистема работает значительно тормознее вычислений. Вывод - читаем по необходимости.<br>
2) Читаем не по Мегобайтам а N-записям - чтобы потом не дочитывать<br>
<br>
Далее вариативно. Я бы создал 10 потоков, которые обслуживают по 100 фалов. &quot;Обслуживают&quot; - это значит подгружают по необходимости пулы записей в своих 100 стеках. M-потокв занимается выборкой &quot;вершин&quot; стеков и их упорядочиванием.<br>
<br>
Ну и самый важный вопрос&#33;&#33;&#33; Если задача не периодическая - нафик оптимизацию. Главное контроль памяти. Если разовая - запускай, ложись спать, сходи в бассейн, покушай суши ... и получи результат  :) <br>
<br>
Все ИМХО.]]></description>
        <author>JoeUser</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811240</guid>
        <pubDate>Tue, 24 Sep 2019 20:37:33 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811240</link>
        <description><![CDATA[JoeUser: <div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body">Сорь, парни ... к алгоритмистике данная задача не относится.<br>
Тут речь идет чисто про оптимизацию процесса под Венду в условиях ограничений.<br>
Поэтому переезжаем...</div></div>]]></description>
        <author>JoeUser</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811236</guid>
        <pubDate>Tue, 24 Sep 2019 19:27:38 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811236</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811226'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pavia &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T17:14:07+00:00">24.09.19, 17:14</time></span><div class='quote '>Так вы ОС говорите перемести головку 1000 раз и каждый раз в разное место и так по кругу. ОС не знает когда какие запросы поступят от приложений и планировать не может поэтому обслуживает в порядке живой очереди.</div></div><br>
Насколько я знаю, уже практически во всех ОС реализован лифт чтения-записи, а не тупая FIFO-очередь. Я уж не говорю о том, что гарантии, что все файлы нефрагментированы и лежат последовательно, отсутствует как класс. Так что рандом обеспечен практически гарантированно, причём с самого начала. Но зато чтение сразу всех избавляет от буферизации промежуточных результатов на диск и многопроходности сортировки. Для 1000 файлов можно сразу зачитать по мегабайту с каждого, и подчитывать по полмегабайта, когда необработанный остаток станет меньше полумегабайта. К тому же вряд ли данные расположены в файлах очень равномерно - так что почти сразу подчитывание превратится в рандом. И, кстати, уже к моменту первого подчитывания на диск будет сброшено порядка 250 мегабайт отсортированных данных.<br>
<br>
Нет, если сразу ориентроваться на двухпроходную сортировку - то да, можно работать с порциями по 32, скажем, файла, и тогда на первом проходе их можно считывать все целиком, и лишь на втором проходе буферизовать. Но это удваивает объём как чтения, так и записи...]]></description>
        <author>Akina</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811226</guid>
        <pubDate>Tue, 24 Sep 2019 17:14:07 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811226</link>
        <description><![CDATA[Pavia: <strong class='tag-b'>FateFlex</strong><br>
Грузите в память по 500 мБ. Соответственно по 50 файлов.<br>
1000/50=20 <br>
И далее останется 20 файлов. И их сливаете их читая построчно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811191'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FateFlex &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T07:53:49+00:00">24.09.19, 07:53</time></span><div class='quote '>...или кеширование файлов windows и так подгружает файлы в память достаточно большими кусками?</div></div><br>
Он подгружает столько сколько вы укажите. Обычно это 4 или 8 кб, реже 64 кб.<br>
<br>
Но суть не в этом, а в том что 1000 файлов. <br>
<br>
<br>
<strong class='tag-b'>Akina</strong><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415871&view=findpost&p=3811194'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2019-09-24T08:15:41+00:00">24.09.19, 08:15</time></span><div class='quote '> Так что открывай все 1000, а ОС уже сама разберётся, по сколько с каждого читать, и даже обеспечит определённое предчтение.</div></div><br>
Так вы ОС говорите перемести головку 1000 раз и каждый раз в разное место и так по кругу. ОС не знает когда какие запросы поступят от приложений и планировать не может поэтому обслуживает в порядке живой очереди.<br>
<br>
Начнём с того что постановку на чтение вы делаете последовательно. Новую порцию запрашиваете после чтения предыдущий. Если бы вы параллельно ставили запросы тогда бы ОС могла планировать. Путём перестановки запросов и группировки близко расположенных. <br>
Если запросы последовательные, то ОС не может предсказать ничего. Просто не существует такого алгоритма. Можно использовать марковские цепи но для них нужна статистика десятки, а то и тысячи запросов. К тому времени пока вы соберёте такую статистику все файлы будут прочитаны. <br>
<br>
Допустим у вас асинхронное чтение. Но проблема в том, что вы читаете 1000 файлов из середины. Значит запрашиваемые кластеры будут находится на расстояние в 10 мб всё время. Поэтому не будет никаких соседних кластеров. <br>
<br>
Жёсткий диск мог бы спланировать своё чтение если бы файлы лежали на одной радиане(или цилиндре). Но насколько мне известно это либо вовсе не реализовано либо реализовано только в серверных дисках с интерфейсом SCSI.]]></description>
        <author>Pavia</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811194</guid>
        <pubDate>Tue, 24 Sep 2019 08:15:41 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811194</link>
        <description><![CDATA[Akina: Собственно если файлы сортированы, нет необходимости грузить их в память сразу, все и целиком. Так что открывай все 1000, а ОС уже сама разберётся, по сколько с каждого читать, и даже обеспечит определённое предчтение.]]></description>
        <author>Akina</author>
        <category>Windows</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811191</guid>
        <pubDate>Tue, 24 Sep 2019 07:53:49 +0000</pubDate>
        <title>Одновременная работа с большим числом файлов.</title>
        <link>https://forum.sources.ru/index.php?showtopic=415871&amp;view=findpost&amp;p=3811191</link>
        <description><![CDATA[FateFlex: Всем привет, поделитесь опытом :)<br><br>Есть 1000 сортированных массивов в 1000 файлов по 10 Mb каждый.<br>Надо объединить их сортировкой слиянием.<br><br>Открываю все файлы на чтение (CreateFileA) и построчно читаю их - очень долго.<br>Загрузить в память сразу 1000 * 10Mb не получается, ограничение windows 2Gb на процесс.<br><br>Стоит ли грузить в память по несколько штук, объединять, а затем объединять объединённые?<br>...или кеширование файлов windows и так подгружает файлы в память достаточно большими кусками?]]></description>
        <author>FateFlex</author>
        <category>Windows</category>
      </item>
	
      </channel>
      </rss>
	