problem casovani programu bylo Re: ioperm - program
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Středa Leden 28 23:12:08 CET 2004
On Wed, 28 Jan 2004, Ladislav Vaiz wrote:
> Pouzivejte radeji select misto usleep, chova se lepe (pri 100Hz casovaci
> ceka 10ms, usleep ceka 20ms).
To, proc se usleep() a spol. takhle chova, je to, ze musi byt zaruceno, ze
se ceka *nejmene* zadany interval. Nemusi to byt 20 ms, ale to vzdy
zbytek aktualniho "tiku" plus "tik" nasledujici. Uz se to tady jednou
resilo, takze zajemci si mohou najit detaily v archivu.
select() si s tim tak tezkou hlavu a pro kratke timeouty proste proces spi
do zacatku nasledujiciho "tiku" hodin. Coz muze byt 10 ms (- delta), ale
treba take 5 ms nebo take skoro nic.
Jinak pro intervaly < 2 ms a procesy majici SCHED_FIFO nebo SCHED_RR ceka
sys_nanosleep() (pomoci ktereho je ve skutecnosti ten userspacovy usleep()
implementovany) ve smycce a podava tedy pomerne presne vysledky. Ovsem to
cekani ve smycce blokuje CPU, se vsemi dusledky z toho plynoucimi.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux