Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.165.131] |
|
Сообщ.
#1
,
|
|
|
День добрый. Такой теоретический вопрос. Вот простейший скрипт на vbs, который читает буфер из большого файла и ничего с ним не делает.
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. давненько я на форум не заходил...) |
Сообщ.
#2
,
|
|
|
Цитата .alex @ Если же запустить параллельно четыре таких скрипта, то тогда загрузка проца будет примерно под 100% и скорость чтения будет приближаться к заявленной для HDD скорости (100МБ/с) С загрузкой проца все понятно. А вот со скоростью чтения диска есть вопрос - как ты ее определяешь? Если бы общее время чтения файла (всеми скриптами) сократилось в 4-5 раз это одно. Если же оно осталось примерно тем же самым, то увеличение скорости чтения 4-мя скриптами - это просто фикция, поскольку реально файл читается с диска один раз, а не 4. При обычном буферированном чтении файла, данные, прочитанные одним из скриптов, оседают в системном (файловом) кэше, поэтому остальные скрипты получают их практически "мгновенно" без обращения к диску. Но формально получается, что 4 скрипта читают за то же время в 4 раза больше данных, чем один - отсюда и формальное увеличение скорости чтения. Цитата .alex @ или выход только многопоточность (хоят в данном случае это "многопроцессность")? При обработке файлов многопоточность может дать заметный выигрыш только в том случае, когда время обработки данных превышает, сравнимо или хотя бы составляет существенный процент от времени чтения этих данных с диска. Но и в этом случае лучше, если чтением файла будет заниматься один поток, а остальные - обработкой считанных данных. Если же несколько потоков будут читать разные файлы или один файл по разным (непоследовательным) смещениям, то вместо выигрыша можно получить существенный проигрыш из-за непоследовательного доступа к диску (накладных расходов на перемещение головок HDD). |
Сообщ.
#3
,
|
|
|
Извините, но "максимально быстро", vbscript и чтение 80 гигов по 4 мегабайта у меня почему-то вместе в голове не укладываются.
|
Сообщ.
#4
,
|
|
|
Dark Side, ну может люди просто на пиво поспорили
|