On-line: Dr. Oldwarez, гостей 2. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 43
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 17.12.06 17:12. Заголовок: Влияние вызова дисковых функций на быстродействие TIME() / SECONDS()


hi all.
Clipper 5.2e + Blinker6. Мне давно известен один эффект, но я не понимаю его природы.

Кто-нибудь может объяснить, почему этот вот цикл:
#DEFINE I_MAX 20000 // двадцать тысяч
FOR I=1 TO I_MAX
K:=TIME() // или K:=SECONDS() -- всё равно
NEXT

-- выполняется на машине P-2400/RAM 512 то 15 секунд, то 20, а то и все 50 сек.
При этом процессор грузится практически на 0 (ноль) процентов и, чтобы его раскочегарить, надо держать нажатым Shift или Ctrl или Alt. Замена вызова TIME() на SECONDS() не помогает (имхо, в этом ничего неожиданного нет).

Но этот же цикл, добавленный внутри всего лишь одной функцией, обращающейся к... ДИСКУ (!!), выполняется практически мгновенно:
#DEFINE I_MAX 20000
FOR I=1 TO I_MAX
K:=TIME()
FILE('C:\1')
NEXT

Почтеннейшая публика! Объясните, плз, почему это всё так происходит.
ЗЫ-1. Забавно, что если вызывать ф-цию FILE() с аргументом = пустой строке или с некорректным именем (типа "C:\><"), то будет опять всё плохо (т.е. она перестаёт волшебным образом помогать).
ЗЫ-2. Тесты проверялись на МИНИМАЛЬНО необходимом наборе библиотек. Никаких приблуд типа SIX,DBFAXF, __WAIT_B, DISIDLE etc. Сборка шла только с BLXCLP52 и CLIPPER.LIB

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]


администратор




Пост N: 534
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.12.06 16:57. Заголовок: Re:


suv3
Получил , спасибо !!!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 92
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 19.12.06 17:25. Заголовок: Re:


suv3 пишет:

 цитата:
куда давать-то


Да и я не отказываюсь - хочется попробовать!
ort sobaka ukrpost net

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 535
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.12.06 18:01. Заголовок: Re:


ort пишет:

 цитата:
Да и я не отказываюсь - хочется попробовать!


Если Юра не против я могу сложить прямо сюда в формате MIME , потому как чую что это не последняя
просьба

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 25
Зарегистрирован: 11.12.06
ссылка на сообщение  Отправлено: 19.12.06 18:28. Заголовок: Re:


клади конечно)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 537
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.12.06 19:07. Заголовок: Re:


Текст , файл пойдет ниже.

 цитата:

Итак, экспериментально установлено, что байты в памяти (область данных биос), хранящие кол-во тиков с полуночи (время) обновляются только в определенные моменты, то есть при обращении к некоторым сервисам дос. К каким - точно не установил. Помню, что при определенных циклах (например, проход по базе) время практически стояло на месте. А при других, вроде бы таких же - шло нормально. Потом вдруг было установлен сервис, при обращении к которому байты обновляются. Забор времени происходит след образом - дергается сервис клавиатуры. а потом считывается счетчик тиков. Этот счетчик тиков уже клипперными средствами (ну так мне тогбы было гибче сделать) делится на коэффициент (я не был уверен в коэффициенте, поэтому я сделал это деление не в ассемблере, а в клиппере)

в sound.obj - функция tcounter()
в клиппер так

#define TimeMultiplier 54.9254834838
func xpSeconds()
local i
i := TCounter()
i := i / 1000
i := i * (TimeMultiplier)
ret i



Файлик

 цитата:

MIME-Version: 1.0
Content-Type: application/octet-stream; name="SOUNDOBJ.ZIP"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="SOUNDOBJ.ZIP"

UEsDBBQAAAAIAOGQkzXLurefqgIAAOIDAAAJAAAAU09VTkQuT0JKVZNPaNNQHMd/Sdq03bp0ylQc
etMpKJ7EHbwsTV67sizpkrTuDxh7UKTsMlx3ckMYyLYqVJCiQ0Q9edyhSPXgf1DXFQR38OJBmKXg
UWUw6uLvvSQDD+/l8/v+vr9vXh/pjW6IWUZOV8/I1uhmlQe4uiTA0OO71X3QxRqOTcbtkGKoRLgX
geEYxwtcrBqHsKPKthyi21vaAAiFuUQ1CqKaNo1ctrwaAtHlp27VuZjjZGUzo6cM2EMZRIaKLyka
0SHCUM8EoAWg+qBa/hjrWLaB810+0ICox5gQkLZHakAY4g9rNM0kNjsEffqHQPQOQUELQPXBOwSC
hpdAnzR4XNY0Q6GO8ZRJCIO0KSch7qiGZRJZy+i2CQksmJMqFkmDhEKa2MOGZY/iHUMv1rRpExWN
GdliDhoZTCT82iIaUfBHQBcKmDhCm3HknB5UPV541jTsPFFYaf1fYjeZoWoaotR5Aa8HwpQ0WK0k
ALioreBnYBOzAXC40oOKOJJUjVSqBtCp9GIdG81oWsYiivoSgK9IKEUcm308EYBD3oxXTwIcDwwq
0eSJc3SChTi2bjAPAMxX4iiF6Xv05wCDSyEYesLdedTDcQBbhWOdVqHxEX3li2L929kX++H8l2v9
27/KX7cKT4VSNC60CmvPWsrKu1Zy5UMr+WmdB2rPWmPm4oIIs1K9LWxfEcvr5c+1m80DkxNT48wj
ep4it4puWFCWUztF3uPB5VSnKDC+fqok1Dk4zfVxS6ldd25Has+47lxHat93pbbj1nshK7Vvu7v6
buk7y26s/Wldaqz9xs3PRsO026hxzYM/jwSvC3W/LiVq0OwfM5mw+D7UEC8UhyKvpmGgnOMHymEn
Ymb3en8fHIWNy/kTGzO45nG9wbWZP7nxI9/X5PJ9D1fw7zz7D1BLAQIUABQAAAAIAOGQkzXLuref
qgIAAOIDAAAJAAAAAAAAAAAAIAAAAAAAAABTT1VORC5PQkpQSwUGAAAAAAEAAQA3AAAA0QIAAAAA




Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 93
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 20.12.06 10:48. Заголовок: Re:


Получил, вставил, заработало!
Спасибо, Юрий! Спасибо, Паша!
Не силен я в этих системных штучках -
удивляюсь как можно обмануть или обойти систему!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 94
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 20.12.06 10:54. Заголовок: Re:


ort пишет:

 цитата:
Спасибо, Юрий! Спасибо, Паша!


Извините, должно быть так:
Спасибо, Юрий! Спасибо, Дима!

Просто, в последнее время все больше с Пашей общался.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 265
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.12.06 17:58. Заголовок: Re:


Я проблему понимаю так (это я обнаружил по работе со своим классом SAY). Вы запускаете программу в Windows. Это - многозадачная система. Каждой задаче выделяется квант времени и назначается приоритет. Я так думаю, что дисковые операции - самые приоритетные и запускаются в первую очередь. Это делается в виду того, что 1) дисковые операции самые медленные, и поэтому желательно их пропускать вперед, чтобы совсем не сделать их медленными; 2) запуск дисковой операции освобождает процессор для решения других задач, так как дисковые операции в основном не требуют участия процессора.
Итак, когда у вас стоит просто SECONDS(), то Windows выделяет вашей программе кванты времени в соответствии с "живой" очередью. Когда же у вас в цикле стоит обращение к дисковым функциям, то ваша программа получает управление "вне очереди", то есть ее приоритет увеличивается, она чаще получает управление, а значит чаще происходит обновление памяти для счетчика BIOS и обращение к нему.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 62
Зарегистрирован: 07.08.06
ссылка на сообщение  Отправлено: 25.12.06 18:36. Заголовок: Re:


Григорьев Владимир пишет:

 цитата:
Итак, когда у вас стоит просто SECONDS(), то Windows выделяет вашей программе кванты времени в соответствии с "живой" очередью.


Имхо, при наличии вопроса "скока щя время?" windows вообще отрубает задачу от ЦПУ. Потому что если это время НЕ спрашивать, а, скажем, выполнять что-то другое (например, вычислятьв цикле логарифм от квадратного корня счетчика), то задача всё же ПОЛУЧАЕТ кванты ЦПУ.
Видимо, SUV прав: запрос времени виндуза воспринимает так: "ах, ты время вопрошаешь ?! получи, но делать тебе, братец, нечего видимо! так что обойдёшься дальше без квантов ЦПУ".
Какое-то странное исключение из этого правила будет, если задача развёрнута на весь экран: кванты всё же даются (но не много :)). Или если в св-вах ярлыка .exe-шника задать приоритет при ожидании = 100% (см. мои посты вверху).




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 29 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 63
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет