LINUX.ORG.RU

почему select по таймауту вываливается немного раньше чем указано в аргумете?


0

0

например если я в аргументе указываю иаймаут 10000 usec то он преимущественно вываливается по таймауту через 9900usec.

оно как-будто и немного (1%) но напрягает на тему что можно от него ещё ждать.

★★★★★

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

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

Попробуй циклом прогнать с нарастанием времени задержки, результаты сюда брось табличкой. Скоко надо - сколько реально сработало...

anonymous
()

hz не может быть бесконечным

кстати, а почему тебя не напрягает что $ time sleep 3 никогда не показывает ровно 3 секунды?

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

>кстати, а почему тебя не напрягает что $ time sleep 3 никогда не показывает ровно 3 секунды?

меня напрягает то что оно МЕНЬШЕ чем указано.

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

> меня напрягает то что оно МЕНЬШЕ чем указано.

А если ты прочтешь man select и узнаешь, что такое поведение by design, то напряжение как-то спадет?

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

реальные цифры при тайм-ауте в 80000usec

/DS1991[2400]: watcher_read_port(/dev/usb/tts/0): after 78681usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2401]: watcher_read_port(/dev/usb/tts/0): after 78720usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2402]: watcher_read_port(/dev/usb/tts/0): after 78914usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2403]: watcher_read_port(/dev/usb/tts/0): after 79184usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2404]: watcher_read_port(/dev/usb/tts/0): after 78995usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2405]: watcher_read_port(/dev/usb/tts/0): after 79220usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2406]: watcher_read_port(/dev/usb/tts/0): after 79256usec (timeout:80000usec) were readed 0 bytes: (NOTHING) /DS1991[2407]: watcher_read_port(/dev/usb/tts/0): after 79212usec (timeout:80000usec) were readed 0 bytes: (NOTHING)

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

ещё цыфры для тайм-аута в 10000usec:

watcher_read_port(/dev/ttyS2): after 9982usec (timeout:10000usec) were readed 0 bytes: (NOTHING) watcher_read_port(/dev/ttyS2): after 9999usec (timeout:10000usec) were readed 0 bytes: (NOTHING) watcher_read_port(/dev/ttyS2): after 9982usec (timeout:10000usec) were readed 0 bytes: (NOTHING) watcher_read_port(/dev/ttyS2): after 10004usec (timeout:10000usec) were readed 0 bytes: (NOTHING) watcher_read_port(/dev/ttyS2): after 9982usec (timeout:10000usec) were readed 0 bytes: (NOTHING) watcher_read_port(/dev/ttyS2): after 10016usec (timeout:10000usec) were readed 0 bytes: (NOTHING) watcher_read_port(/dev/ttyS2): after 9981usec (timeout:10000usec) were readed 0 bytes: (NOTHING)

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

встречный вопрос : как Вы измеряли время через которое реально возникал timeout у select`а ?

надеюсь не опираясь на значение возвращаемое самим select`ом.. Оно по стандарту неопределенно, а в linux`е отстаёт на один цикл опроса.

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

>как Вы измеряли время через которое реально возникал timeout у select`а ?

gettimeofday() до и после селекта. разница и есть приближённый реальный таймаут

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