Sử dụng Time.now
(mà trả về tường đồng hồ thời gian) vì các đường cơ sở có một số vấn đề có thể dẫn đến hành vi không mong muốn. Điều này là do thực tế rằng thời gian ép xung có thể thay đổi như bước nhảy vọt được chèn hoặc time slewing để điều chỉnh giờ địa phương thành thời gian tham chiếu.
Nếu có, ví dụ: một bước nhảy vọt thứ hai được chèn vào trong quá trình đo, nó sẽ bị tắt một giây. Tương tự, tùy thuộc vào điều kiện hệ thống cục bộ, bạn có thể phải đối phó với thời gian tiết kiệm ánh sáng ban ngày, đồng hồ chạy nhanh hơn hoặc chậm hơn hoặc đồng hồ thậm chí nhảy ngược thời gian, dẫn đến thời lượng âm và nhiều vấn đề khác.
Giải pháp cho vấn đề này là sử dụng thời gian khác nhau của đồng hồ: một đồng hồ đơn điệu. Loại đồng hồ này có các đặc tính khác với đồng hồ treo tường. Tăng dần theo nghĩa đen, tức là không bao giờ quay lại và tăng với tốc độ không đổi. Với điều đó, nó không đại diện cho đồng hồ treo tường (tức là thời gian bạn đọc từ đồng hồ trên tường) nhưng dấu thời gian bạn có thể so sánh với dấu thời gian sau đó để có sự khác biệt.
Trong Ruby, bạn có thể sử dụng một dấu thời gian như vậy với Process.clock_gettime(Process::CLOCK_MONOTONIC)
thích sau:
t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
# => 63988.576809828
sleep 1.5 # do some work
t2 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
# => 63990.08359163
delta = t2 - t1
# => 1.5067818019961123
delta_in_milliseconds = delta * 1000
# => 1506.7818019961123
Phương pháp Process.clock_gettime
trả về một dấu thời gian như một phao với giây phân đoạn. Số thực tế được trả về không có ý nghĩa xác định (mà bạn nên dựa vào). Tuy nhiên, bạn có thể chắc chắn rằng cuộc gọi tiếp theo sẽ trả về một số lớn hơn và bằng cách so sánh các giá trị, bạn có thể nhận được sự khác biệt thời gian thực.
Các thuộc tính này làm cho phương pháp trở thành ứng cử viên chính để đo chênh lệch thời gian mà không thấy chương trình của bạn thất bại trong thời gian ít nhất (ví dụ: vào lúc nửa đêm tại Đêm Giao thừa khi có thêm lần nhảy thứ hai khác).
Nguồn
2017-08-03 11:41:45
Thời gian truyền để nổi ở đây là không cần thiết. –