На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Jin X
  
> Скорость чтения/записи файла
    День добрый. Такой теоретический вопрос. Вот простейший скрипт на vbs, который читает буфер из большого файла и ничего с ним не делает.
    ExpandedWrap disabled
      Set FSO = CreateObject("Scripting.FileSystemObject")
      Set File = FSO.GetFile("z:\zzz.iso")
      Set TextStream = File.OpenAsTextStream(1)
       
      Dim sIna
      sIna = ""
       
      Do While Not TextStream.AtEndOfStream
        sIna = TextStream.Read(4096 * 1000)
        sIna = ""
      Loop
      TextStream.Close

    У меня задача максимально быстро читать большие файлы (от 80Гб), так вот это скрипт грузит проц процентов на 12-15 и в диспечере задач видно что процесс в котором запущен скрипт читает файл примерно со скоростью 20МБ/с. Если же запустить параллельно четыре таких скрипта, то тогда загрузка проца будет примерно под 100% и скорость чтения будет приближаться к заявленной для HDD скорости (100МБ/с). Подскажите почему один скрипт не может "на полную" использовать ресурсы компа, это ОС его ограничивает? Можно ли это ограничение убрать для конкретного процесса или выход только многопоточность (хоят в данном случае это "многопроцессность")? Или вообще все не так?))
    ps. давненько я на форум не заходил...)
      Цитата .alex @
      Если же запустить параллельно четыре таких скрипта, то тогда загрузка проца будет примерно под 100% и скорость чтения будет приближаться к заявленной для HDD скорости (100МБ/с)

      С загрузкой проца все понятно. А вот со скоростью чтения диска есть вопрос - как ты ее определяешь? Если бы общее время чтения файла (всеми скриптами) сократилось в 4-5 раз это одно. Если же оно осталось примерно тем же самым, то увеличение скорости чтения 4-мя скриптами - это просто фикция, поскольку реально файл читается с диска один раз, а не 4. При обычном буферированном чтении файла, данные, прочитанные одним из скриптов, оседают в системном (файловом) кэше, поэтому остальные скрипты получают их практически "мгновенно" без обращения к диску. Но формально получается, что 4 скрипта читают за то же время в 4 раза больше данных, чем один - отсюда и формальное увеличение скорости чтения.

      Цитата .alex @
      или выход только многопоточность (хоят в данном случае это "многопроцессность")?

      При обработке файлов многопоточность может дать заметный выигрыш только в том случае, когда время обработки данных превышает, сравнимо или хотя бы составляет существенный процент от времени чтения этих данных с диска. Но и в этом случае лучше, если чтением файла будет заниматься один поток, а остальные - обработкой считанных данных. Если же несколько потоков будут читать разные файлы или один файл по разным (непоследовательным) смещениям, то вместо выигрыша можно получить существенный проигрыш из-за непоследовательного доступа к диску (накладных расходов на перемещение головок HDD).
        Извините, но "максимально быстро", vbscript и чтение 80 гигов по 4 мегабайта у меня почему-то вместе в голове не укладываются.
          Dark Side, ну может люди просто на пиво поспорили :)
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0215 ]   [ 16 queries used ]   [ Generated: 19.03.24, 07:18 GMT ]