5 pontos por GN⁺ 2023-07-23 | 1 comentários | Compartilhar no WhatsApp
  • Em sistemas modernos, colisões de timestamps em nanossegundos são comuns e ocorrem em cerca de 5% das amostras quando o relógio é lido simultaneamente em 4 núcleos físicos.
  • Não é seguro presumir que timestamps brutos em nanossegundos sejam identificadores únicos.
  • Usando um programa de teste escrito em Go, foram comparadas as diferenças relativas entre timestamps consecutivos e timestamps absolutos.
  • O comportamento das colisões de timestamp varia conforme o sistema, e resultados diferentes foram observados no Mac OS X e no Linux.
  • No Linux, dentro de uma única thread, o tempo absoluto e o tempo monotônico sempre aumentam, e o incremento mínimo é de 32 ns. Entre threads, cerca de 5% dos tempos absolutos são iguais aos de outra thread e, mesmo ao executar com 2 threads em um sistema de 4 núcleos, ainda ocorrem cerca de 2% de colisões de timestamp.
  • No Mac OS X, como o tempo absoluto tem resolução de microssegundos, muitas colisões ocorrem ao repetir o mesmo teste. Até mesmo dentro de uma thread, o relógio monotônico às vezes pode não aumentar.
  • Para exploração adicional, o programa de teste pode ser encontrado no Github.

1 comentários

 
GN⁺ 2023-07-23
Comentários do Hacker News
  • Usar IDs que combinam um componente de tempo com um número de sequência pode evitar colisões.
  • UUIDv7 é um exemplo de ID que combina um componente de tempo com um número de sequência.
  • O escalonamento de threads pode afetar a precisão dos timestamps em sistemas multicore.
  • UUID versão 4 (aleatório) pode ser usado para garantir identificadores únicos.
  • Algumas pessoas resolvem o problema de colisões com verificação de tempo e teste e definição atômicos de uma variável global.
  • Erlang/Elixir distingue entre tempo monotônico e estritamente monotônico.
  • Relógios de computador podem não ter precisão de nanossegundos.
  • Existe uma lenda de que o Lotus Notes usa timestamps com resolução de 1 segundo como IDs únicos.
  • Ciclos de clock da CPU e otimizações do compilador podem afetar a precisão dos timestamps.
  • Tempo preciso pode ser um problema de segurança, então projetistas de CPU introduzem jitter de clock de propósito.