Я хочу узнать, насколько точным является время, которое было показано при вводе даты +% s% N в терминале.
Я знаю, что это дает нам время в наносекундах, но цифры действительны ?. Является ли это моментом, когда я нажимаю enter в наносекундах или это подделка с некоторой точностью и ниже, скажем, миллисекунды?
Конечно, нет. Все, что вы делаете, требует измеримого времени. От удара введите, чтобы реагировать на клавиатуру, передав ее в оболочку, которая будет запускать date, чтобы отобразить вывод на вашем терминале и прочитать его.
Если мы снова используем диаграммы из этого сообщения:
d3] Вход
+-------------------+ +-------------+
----->| terminal emulator |-------------->| application |
+-------------------+ +-------------+
keypress character or
escape sequence
+-------------+ +-------------------+
| application |-------------->| terminal emulator |
+-------------+ +-------------------+
character or
escape sequence
Каждая из стрелок и каждого из приведенных выше полей представляет собой процессы, которые занимают измеримое количество времени. В случае программы date время, которое вы видите, это время, которое было получено, когда оно запросило систему в течение текущего времени. Этот процесс будет похож на
You hit enter --> `date` is executed -> queries current time
. Снова, каждый из вышеперечисленных шагов (и другие, более мелкие, запустите strace date, чтобы получить представление) потребуется время, так что нет, возвращенное время не будет точный момент, когда вы нажмете Enter.
К моменту, когда результат будет напечатан на вашем терминале, время (с точностью до наносекунды) снова изменится. То, что вы видите, это то, что было возвращено системой, когда date спросил.
Однако вы можете быть уверены, что он достаточно точен для всего, что вы можете захотеть сделать на своем компьютере. Если вам нужна точность на уровне наносекунды, вам, вероятно, понадобится специальное оборудование.