LINUX.ORG.RU

Таймеры с терпимой задержкой


0

0

Смотрел мелкософтные лекции по Windows 7, заинтересовал новый механизм таймеров (функция SetWaitableTimerEx) с параметром TolerableDelay, который устанавливает нужную точность периода, с помощью которой ядро новой винды, если возможно, старается выполнять таймеры совмещённо. Т. е. если есть один таймер в 1 секунду с точностью 0,2 секунды, другой таймер с периодом в 0,9 секунды с точностью 0,05 и третий раз в две секунды с точностью 0,5, то в системе будет всего один железный таймер с периодом 0,9, который будет вызывать функции первого и второго каждый раз и третьего через раз.

anonymous
Ответ на: комментарий от anonymous


ммм.. лично я не слышал. по крайней мере AFAIU в POSIX такого нет. хотя задавать терпимую задержку - мысль в принципе интересная.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> ммм.. лично я не слышал. по крайней мере AFAIU в POSIX такого нет. хотя задавать терпимую задержку - мысль в принципе интересная.

в смысле желаемую точность таймера.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от wfrr

Время между твоим комментарием и ссылкой на лекцию меньше её продолжительности. Поэтому ты лопух, её не смотревший.

Догадываюсь, что твои возражения будут в духе �потому что никто из программистов не будет заморачиваться, так как пользователи ничего сразу не заметят�. Ответ Microsoft на это прост, они построили целую инфраструктуру по контролю со стороны пользователя за неадекватными по отношению к энергосбережению программами, и теперь они будут также бросаться в глаза как, например, сейчас бросаются потребители 100% CPU и пары гигабайт памяти.

anonymous
()

> Т. е. если есть один таймер в 1 секунду с точностью 0,2 секунды, другой таймер с периодом в 0,9 секунды с точностью 0,05 и третий раз в две секунды с точностью 0,5, то в системе будет всего один железный таймер с периодом 0,9, который будет вызывать функции первого и второго каждый раз и третьего через раз.

то есть уже на четвёртой секунде таймер №1 начнёт врать, а ещё секунд через 6 начнёт лажать №3 ?? О да, это прогресс :

Ещё лучше их периоды слегка рандомизировать, и как это никому в редмонде в голову не пришло..или это в загашнике - для следующего технологического прорыва ? :)

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

Когда тролль начинает скисать он спускается до оскрблений, ты я вижу скис даже не олучив сахарку.

>Догадываюсь, что твои возражения будут в духе �потому что никто из программистов не будет заморачиваться, так как пользователи ничего сразу не заметят�.


Чойто эксплорер на движек дилло перевели?

>Ответ Microsoft на это прост, они построили целую инфраструктуру по контролю со стороны пользователя за неадекватными по отношению к энергосбережению программами, и теперь они будут также бросаться в глаза как, например, сейчас бросаются потребители 100% CPU и пары гигабайт памяти.


Пердешь микрософта ничто в сравнении с киловатами сжираемыми вистой, о каком энергосбережении может иди речь, если требовательность к ресурсам выньИВыкинь7 больше хп?

wfrr ★★☆
()
Ответ на: комментарий от MKuznetsov

Они не врут, тут речь идёт только о погрешности одного периода, а общая накопленная программиста не волнует. Т. е. если программисту таймер нужен только для того, чтобы прогрессбар какой-нибудь обновлять или анимацию сделать, то традиционный таймер (который никто не отбирает) жрёт слишком много ресурсов и не вписывается в стратегию �сделал дело — сиди в idle�.

anonymous
()
Ответ на: комментарий от MKuznetsov

Они не врут, тут речь идёт только о погрешности одного периода, а общая накопленная программиста не волнует. Т. е. если программисту таймер нужен только для того, чтобы прогрессбар какой-нибудь обновлять или анимацию сделать, то традиционный таймер (который никто не отбирает) жрёт слишком много ресурсов и не вписывается в стратегию "сделал дело — сиди в idle".

anonymous
()

Я такие таймеры всегда делал вручную с завязкой на epoll и прочие мультиплексоры.

spy_
()

наверно это надо когда существует куча таймеров ибо когда их всего три я не вижу проблемы сделать руками. И, слава богу, я такое могу сам написать за час-два :).

В какой проге используется много-много таймеров? Всякие вебсерверы итп не предлагать, там задача элементарно решается одним глобальным под который подстраиваются события(тот самый tolerance).

микрософту надо было начинать с fork а не всякую бесполезную хрень писать :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Ты не понял, даже если у тебя один таймер на всю твою программу, то у пользователя их может быть запущен десяток разных в фоне (см. например http://ols.108.redhat.com/reprints/jones-reprint.pdf ), поэтому такой механизм и должен быть system-wide.

>микрософту надо было начинать с fork

Он у них в POSIX-подсистеме уже примерно десять лет есть:)

anonymous
()
Ответ на: комментарий от spy_

> Я такие таймеры всегда делал вручную с завязкой на epoll и прочие мультиплексоры.

ну а теперь представим, что в ядро приходит несколько сотен/тысяч процессов, и каждый из них вызывает тот или иной демультиплексор событий задавай при этом желаемый таймаут. и при этом никто из них не задаёт желаемую точность отслеживания этого таймаута -> исходим из худшего и считаем что она "as beast as possibly" i.e. всё, что ядро сможет выжать из таймера. а железячный таймер то один [макс. несколько]..

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

1) тролль

2) см. реализацию таймеров (ну например) в linux

3) не надо путать системные таймеры и прикладные таймерные события в скажем в GUI

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

> поэтому такой механизм и должен быть system-wide.

Эээ, щас бошка не варит нужно ли такое системе. Не уничтожит ли оверхед от этой системы всё её сомнительное преимущество? Сколько нужно таймеров в системе чтобы это сэкономило ресурсы? Да и не будет ли проблем когда куча таймеров срабатывает одновременно? А то у крона даже time spread есть на этот случай.

true_admin ★★★★★
()
Ответ на: комментарий от MKuznetsov

> 2) см. реализацию таймеров (ну например) в linux
> 3) не надо путать системные таймеры и прикладные таймерные события в скажем в GUI

а можно раскрыть тему поподробнее? хотя бы вкратце. вы судя по всему явно в теме.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

>> Он у них в POSIX-подсистеме уже примерно десять лет есть:)

С этого места пжлста подробнее. Как мне его использовать например из цигвиновского перла?

sergej ★★★★★
()

> Смотрел мелкософтные лекции по Windows 7, заинтересовал новый механизм таймеров (функция SetWaitableTimerEx) с параметром TolerableDelay

по ходу у M$ очень много программеров, которым занятся толковым делом влом, а отчитыватся за что-то надо, вот и выдумывают очередные поделки "экономящие ресурсы".

ну и конечно же про такое счастье надо было пиарщикам делать ролик, ага

anonymous
()
Ответ на: комментарий от anonymous

>Если действительно интересно, то вот тут рассказывают, почему в будущем без такого механизма нельзя: http://channel9.msdn.com/pdc2008/PC02/

А как это смотреть? Microsoft Silverlight may not be supported on your computer's hardware or operating system.

br0adcast007
()
Ответ на: комментарий от tailgunner

>> POSIX application cannot create a thread or window, nor can it use RPC or socket

но зато fork есть. :) по ссылкам правда непосредственно про него ничего не написано, но будем надеяться, что POSIX.1 они реализовали весь.

Жаль только нельзя использовать fork в нормальных приложениях...

sergej ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.