5P by neo 2023-07-23 | favorite | 댓글 1개
  • 현대 시스템에서 나노초 타임스탬프 충돌이 흔하며, 4개의 물리 코어에서 시계를 동시에 읽을 때 약 5%의 샘플에서 발생합니다.
  • 원시 나노초 타임스탬프가 고유 식별자라고 가정하는 것은 안전하지 않습니다.
  • Go로 작성된 테스트 프로그램을 사용하여 연속적인 타임스탬프와 절대 타임스탬프의 상대적 차이를 비교했습니다.
  • 타임스탬프 충돌의 동작은 시스템에 따라 다르며, Mac OS X와 Linux에서 다른 결과가 관찰되었습니다.
  • Linux에서는 단일 스레드 내에서 절대 시간과 단조 시간이 항상 증가하며, 최소 증분은 32 ns입니다. 스레드 간에는 약 5%의 절대 시간이 다른 스레드와 동일하며, 4 코어 시스템에서 2개의 스레드로 작업할 때에도 약 2%의 타임스탬프 충돌이 발생합니다.
  • Mac OS X에서는 절대 시간이 마이크로초 해상도를 가지므로 동일한 테스트를 반복할 때 많은 충돌이 발생합니다. 심지어 스레드 내에서도 단조 시계가 때로는 증가하지 않을 수 있습니다.
  • 추가 탐색을 위해 테스트 프로그램은 Github에서 찾을 수 있습니다.
Hacker News 의견
  • 시간 구성 요소와 일련 번호를 결합한 ID를 사용하면 충돌을 방지할 수 있습니다.
  • UUIDv7은 시간 구성 요소와 일련 번호를 결합한 ID의 예입니다.
  • 스레드 스케줄링은 멀티 코어 시스템에서 타임스탬프의 정확성에 영향을 줄 수 있습니다.
  • 버전 4 (랜덤) UUID는 고유 식별자를 보장하기 위해 사용될 수 있습니다.
  • 일부 사람들은 충돌 문제를 시간 확인과 전역 변수의 원자적 테스트 및 설정으로 해결합니다.
  • Erlang/Elixir는 단조적 및 엄격한 단조적 시간을 구분합니다.
  • 컴퓨터 시계는 나노초 정밀도를 가지지 않을 수 있습니다.
  • Lotus Notes가 고유 ID로 1초 해상도의 타임스탬프를 사용하는 전설이 있습니다.
  • CPU 클록 사이클과 컴파일러 최적화는 타임스탬프의 정밀도에 영향을 줄 수 있습니다.
  • 정확한 시간은 보안 문제가 될 수 있으므로 CPU 설계자들은 일부로 클록 지터를 도입합니다.