Genellikle bir anlık zaman sıçraması meydana geldiğinde hataya açık olan veritabanı sunucusu değildir: bu süreyi kullanan uygulamaları.
Genellikle izlemenin iki yolu vardır: kendi zamanının izlenmesi veya sistem zamanının karşılaştırılması. İkisinin de bazı olumlu ve olumsuz değişimleri var.
Kendi zaman takibi
Kesin zamanlamanın bu kadar kritik olmadığı bazı gömülü programlama ve sistemlerde kullanıldığını görüyorum. Bir ana uygulama döngüsünde, bir 'kene' izlemenin bir yolu halledilir. Bu, çekirdek tarafından verilen bir alarm, uyku veya geçen sürenin bir göstergesini veren bir seçim olabilir. Hangi zamanın geçtiğini bildiğiniz zaman, bu saati bir sayaca ekleyebileceğinizi veya çıkarabileceğinizi biliyorsunuz. Bu sayaç, zamanlama uygulamanızı gerçekleştiren şeydir. Örneğin, sayaç 10 saniyeden yüksekse bir şeyi atabilirsiniz veya bir şey yapmanız gerekir.
Uygulama zamanı takip etmezse, sayaç değişmez. Bu, uygulamanızın tasarımına bağlı olarak istenebilir. Örneğin, uzun süren bir işlemin bir şeyi ne kadar süreyle gerçekleştirdiğini takip etmek, bir sayaçla bir başlama / durma zaman damgaları listesinden daha kolaydır.
Pro:
- Sistem saatine bağlı değil
- Büyük bir çarpıklık kırmak olmayacak
- Pahalı sistem çağrısı yok
- Küçük sayaçlar tam bir zaman damgasından daha az hafızaya mal olur
con:
- Zaman çok doğru değil
- Sistem zamanındaki değişiklik onu daha da yanlış yapabilir
- Zamanlama, uygulamayı çalıştırmaya göre görmez, sürmez
Sistem saatini karşılaştırma
Bu daha sık kullanılan sistemdir: bir zaman damgası saklayın ve bir sistem zaman çağrısı kullanarak zaman damgasıyla karşılaştırın. Sistem zamanındaki büyük sapmalar uygulamanızın bütünlüğünü tehdit edebilir, birkaç saniyelik bir görev saatin yönüne bağlı olarak birkaç saat sürebilir veya sona erebilir.
Pro:
- Doğru zaman karşılaştırma
- Yeniden başlatmalar ve uzun süreli kesintiler üzerinde ısrar ediyor
con:
- Diğer zaman damgaları ile karşılaştırmak üzere yeni bir zaman damgası almak için sistem çağrısı alır
- Uygulama çarpıklıkların farkında olmalı veya kırılabilir
Etkilenen sistemler
Uygulamaların çoğu, görevleri zamanlamak için karşılaştırma yaparken zaman damgasını kullanır. Önbellek temizlemeli olabilecek veritabanı sistemleri için.
Sorgu dilinde bir veritabanı ve çağrı süresi işlevleri kullanan tüm uygulamalar, uygulama uygun bir şekilde algılamaz ve işlemezse, çarpıklıklardan etkilenir. Uygulamalar çalışmayı asla durduramaz veya amacına bağlı olarak belirsiz oturum açma sürelerine izin veremez.
Posta sistemleri, eski veya teslim edilmeyen postaları işlemek için zaman damgaları ve / veya zaman aşımlarını kullanır. Bir saat kayması bunu etkileyebilir, ancak çok daha az bir etkiye sahip. Sunuculara yeniden bağlanmaya ilişkin zaman aşımına uğrayan zamanlayıcılar, bağlantı sunucusunda cezalarla sonuçlanabilecek şekilde kaçırılabilir.
Sistem zamanını değiştirirken çekirdek alarmlarının çalışacağını sanmıyorum (araştırmamıştım). Bunları kullanan sistemler güvenli olabilir.
Çözümler
Yavaşça hareket zamanı. Bu, favori zaman çözümünüzün belgelerinde bulunabilir.
now()
. Cevabınıza zaman değiştirmek için herhangi bir güvenli yöntem ekleyebilir misiniz?