Zwykle nie jest to serwer bazy danych, który jest podatny na błędy, gdy nastąpi natychmiastowy upływ czasu: są to aplikacje, które wykorzystują ten czas.
Istnieją dwa sposoby śledzenia czasu: śledzenie własnego czasu lub porównywanie czasu systemowego. Oba mają pewne pozytywne i negatywne kompromisy.
Własne śledzenie czasu
Widzę to stosowane w niektórych programach wbudowanych i systemach, w których dokładne taktowanie nie jest tak ważne. W głównej pętli aplikacji obsługiwany jest sposób śledzenia „tyknięcia”. Może to być alarm wysyłany przez jądro, tryb uśpienia lub wybór, który wskazuje, ile czasu minęło. Kiedy wiesz, która godzina minęła, wiesz, że możesz dodać lub odjąć ten czas do licznika. Ten licznik sprawia, że twoja aplikacja pomiaru czasu się wydarza. Na przykład, jeśli licznik jest dłuższy niż 10 sekund, możesz coś odrzucić lub musisz coś zrobić.
Jeśli aplikacja nie śledzi czasu, licznik się nie zmieni. Może to być pożądane w zależności od projektu aplikacji. Na przykład śledzenie, jak długo trwa proces długotrwały, jest łatwiejsze dzięki licznikowi niż liście znaczników czasowych start / stop.
Zawodowiec:
- Nie zależy od zegara systemowego
- Nie złamie się przy dużym przekrzywieniu
- Brak kosztownego połączenia z systemem
- Małe liczniki będą kosztować mniej pamięci niż pełny znacznik czasu
Kon:
- Czas nie jest bardzo dokładny
- Zmiana czasu systemowego może uczynić go jeszcze bardziej niedokładnym
- Czas zależy od uruchomienia aplikacji, nie utrzymuje się
Porównywanie czasu systemowego
Jest to system używany częściej: przechowuj znacznik czasu i porównuj go ze znacznikiem czasu za pomocą systemowego wywołania czasowego. Ogromne przekrzywienia w czasie systemowym mogą zagrozić integralności aplikacji, zadanie kilku sekund może zająć godziny lub zakończyć się natychmiast, w zależności od kierunku zegara.
Zawodowiec:
- Dokładne porównanie czasu
- Utrzymuje się w stosunku do restartów i długich przerw w pracy
Kon:
- Wykonuje wywołanie systemowe, aby uzyskać nowy znacznik czasu w celu porównania z innymi znacznikami czasu
- Aplikacja musi być świadoma wypaczeń lub może się zepsuć
Dotknięte systemy
Większość aplikacji korzysta ze znaczników czasu w porównaniu do planowania zadań. W przypadku systemów baz danych, które mogą być porządkami pamięci podręcznej.
Wszystkie aplikacje korzystające z bazy danych i funkcji czasu wywołania w języku zapytań będą miały wpływ na przesunięcia, jeśli aplikacja nie wykryje odpowiednio i nie obsługuje. Aplikacje nigdy nie mogą przestać działać ani dopuszczać nieokreślonych okresów logowania w zależności od celu.
Systemy pocztowe będą używać znaczników czasu i / lub limitów czasu do obsługi starych lub niedostarczonych wiadomości e-mail. Odchylenie zegara może na to wpłynąć, ale przy znacznie mniejszym wpływie. Liczniki czasu wycofania dotyczące ponownego połączenia z serwerami mogą zostać pominięte, co może skutkować karami na łączącym się serwerze.
Nie sądzę (nie badałem), że alarmy jądra będą się włączać przy zmianie czasu systemowego. Systemy, które z nich korzystają, mogą być bezpieczne.
Rozwiązania
Delikatnie przesuwaj czas. Można to znaleźć w dokumentacji swojego ulubionego rozwiązania czasowego.
now()
. Czy możesz dodać bezpieczną metodę zmiany czasu do swojej odpowiedzi?