Molto tempo fa ho avuto un bug nel mio programma. La causa principale è che la funzione CDo timer hanno una migliore precisione rispetto al sonno()
sleep(60);
farebbe in rare occasioni dormono meno di 60 secondi. O la funzione ha fatto sì che il filo a dormire più di 60 s, ma l'orologio è stato cambiato automaticamente dal sistema operativo (questo sembra probabile dal momento bug stava accadendo solo su XX::00::00
), alias esso si manifestava raramente, e solo su "ora rotonda" (sleep shoudl si è concluso a> xh0m0s, è terminato su x-1h59m59.99*s
).
Quindi il mio project manager ha continuato a parlare di come ha detto milioni di volte che dovremmo usare solo timer, non dormire. Da quel momento ho accettato l'idea che i timer siano più accurati di sleep(), ma ora sento che dovrei chiedere una fonte più autorevole. Quindi:
- I timer sono più precisi del sonno?
- (relativi) sono essi in fondo (a livello di sistema operativo) implementata con metodi diversi?
So timer sono usati per fare callback, dormire ritarda solo l'esecuzione di thread corrente, Im parlando di parte l'esecuzione ritardo della realizzazione.
BTW OS era Linux, ma mi interessa la risposta generale se possibile.
In entrambi i casi, non è una buona idea aspettarsi che un'operazione di timer/sospensione si interrompa veramente per la durata specificata. Il sistema operativo fa tutto il possibile per onorare la tua richiesta, ma a volte fallirà. Preparati per questo. – TheZ
So che ora, bug "fix" (dopo che il manager si è calmato dai suoi timer rant) era solo per aggiungere un po 'di ritardo alla sicurezza. – NoSenseEtAl
Sembra che ci sia un problema architettonico più profondo se una differenza di +/- 1 secondo in un sonno fa sì che tutto si rompa ... – Rook