Нужна идея, как реализовать монотонное течение времени. Вопрос вот в чём. Допустим, мне надо отследить таймаут какого-то события, я запоминаю время начала события, делаю select/сетевые операции с теми, кто готов, проверяю таймауты. Всё отлично. Но, администратор сервера, вдруг обнаруживает, что на сервере уехало время, и делает ntpdate [таймсервер], который говорит: ок, время уехало на 6 часов вперёд, я его вернула назад. Таким образом, таймауты, которых запомнили 6 часов вперёд, провисят 6 часов до момента, пока их обнаружат.
Самым простым решением было бы использование какого-либо монотонно тикающего таймера, поскольку абсолютное время не важно, а только относительное. Однако, не использовать же для этого /proc/uptime, как-то некрасиво. Не могу сообразить, откуда взять монотонный таймер, чтобы это было не настолько linux-specific. Самостоятельно дёргать SIGALRM раз в секунду на Perl мне представляется неправильным, как и вообще работа с сигналами в Perl. Можно отслеживать таймауты из будущего и ресетить их, но таймауты из прошлого будут срабатывать слишком рано, а таймауты из будущего несколько запоздало. Можно попробовать решить проблему административно -- поставить ntpd, но это тоже не 100%-е решение.
В общем нужна идея монотонного таймера, нормально доступного из Perl, возможно даже с тредами.