Зазвичай це не сервер бази даних, який вразливий до помилок, коли відбувається миттєвий стрибок часу: це програми, які використовують час, який є.
Зазвичай існує два способи відстеження часу: власне відстеження часу або порівняння системного часу. Обидва мають позитивні та негативні компроміси.
Відстеження власного часу
Я бачу, що це використовується у деяких вбудованих програмуваннях та системах, де точні терміни не так важливі. У головному циклі додатків береться спосіб відстеження "галочки". Це може бути сигнал тривоги, заданий ядром, режимом сну або вибору, який вказує на кількість пройденого часу. Коли ви знаєте, який час минув, ви знаєте, що можете додавати або віднімати цей час до лічильника. Цей лічильник - це те, що спричиняє вашу програму для встановлення часу. Наприклад, якщо лічильник перевищує 10 секунд, ви можете щось відкинути або потрібно щось зробити.
Якщо додаток не відстежує час, лічильник не зміниться. Це може бути бажаним залежно від дизайну вашої програми. Наприклад, відстежувати, як довго триває процес, який займається чимось, обробляється легше за допомогою лічильника, ніж список часових позначок старту / зупинки.
Про:
- Не залежить від годинника системи
- Не зламається на великому перекосі часу
- Немає дорогих системних дзвінків
- Невеликі лічильники обійдуться менше пам'яті, ніж повна часова мітка
Con:
- Час не дуже точний
- Зміна системного часу може зробити його ще більш неточним
- Час відносно запуску програми, не зберігається
Порівняння системного часу
Ця система використовується частіше: зберігайте часову марку та порівнюйте її з часовою міткою за допомогою системного дзвінка в часі. Величезні перекоси в системний час можуть загрожувати цілісності вашої програми, завдання на кілька секунд може зайняти години або закінчитися негайно залежно від напрямку годинника.
Про:
- Точне порівняння часу
- Наполягає через перезавантаження та тривалі відключення
Con:
- Здійснює системний дзвінок, щоб отримати свіжу позначку часу для порівняння з іншими часовими марками
- Додаток повинен знати про перекоси або може зламатися
Постраждалі системи
Більшість додатків використовуватимуть часові позначки порівняно із завданням розкладу. Для систем баз даних, які могли б очистити кеш.
На всі програми, які використовують базу даних та функції часу виклику на мові запитів, будуть впливати перекоси, якщо програма не виявить та не обробляє їх відповідно. Програми ніколи не можуть припиняти роботу або допускати невизначені періоди входу в залежності від їх призначення.
Поштові системи використовуватимуть часові позначки та / або тайм-аути для обробки застарілих або недоставлених листів. Нахил годинника може вплинути на це, але з набагато меншим впливом. Таймери зворотного відключення відновлення підключення до серверів можуть бути пропущені, що призведе до штрафних санкцій на підключувальному сервері.
Я не думаю (не досліджував), що тривоги ядра вимкнуться при зміні системного часу. Системи, які використовують їх, можуть бути безпечними.
Рішення
Акуратно переміщуйте час. Це можна знайти в документації улюбленого рішення часу.
now()
. Чи можете ви додати у відповідь будь-який безпечний метод зміни часу?