5 คะแนน โดย GN⁺ 2023-07-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ในระบบสมัยใหม่ การชนกันของไทม์สแตมป์ระดับนาโนวินาทีเกิดขึ้นได้บ่อย และเกิดในตัวอย่างประมาณ 5% เมื่ออ่านนาฬิกาพร้อมกันจาก 4 คอร์จริง
  • การสมมติว่าไทม์สแตมป์ระดับนาโนวินาทีดิบเป็นตัวระบุที่ไม่ซ้ำกันนั้นไม่ปลอดภัย
  • ใช้โปรแกรมทดสอบที่เขียนด้วย Go เพื่อเปรียบเทียบความแตกต่างเชิงสัมพัทธ์ระหว่างไทม์สแตมป์แบบต่อเนื่องกับไทม์สแตมป์แบบสัมบูรณ์
  • พฤติกรรมของการชนกันของไทม์สแตมป์แตกต่างกันไปตามระบบ โดยพบผลลัพธ์ที่ต่างกันบน Mac OS X และ Linux
  • บน Linux ภายในเธรดเดียว เวลาสัมบูรณ์และเวลาแบบโมโนโทนิกจะเพิ่มขึ้นเสมอ และมีค่าการเพิ่มขั้นต่ำ 32 ns ข้ามเธรด เวลาสัมบูรณ์ประมาณ 5% จะตรงกับของอีกเธรดหนึ่ง และแม้ทำงานด้วย 2 เธรดบนระบบ 4 คอร์ ก็ยังเกิดการชนกันของไทม์สแตมป์ประมาณ 2%
  • บน Mac OS X เวลาสัมบูรณ์มีความละเอียดระดับไมโครวินาที จึงเกิดการชนกันจำนวนมากเมื่อทำการทดสอบเดิมซ้ำ แม้กระทั่งภายในเธรดเดียว นาฬิกาโมโนโทนิกบางครั้งก็อาจไม่เพิ่มขึ้น
  • สำหรับการสำรวจเพิ่มเติม สามารถดูโปรแกรมทดสอบได้บน Github

1 ความคิดเห็น

 
GN⁺ 2023-07-23
ความเห็นจาก Hacker News
  • การใช้ ID ที่รวมองค์ประกอบของเวลาเข้ากับหมายเลขลำดับสามารถป้องกันการชนกันได้
  • UUIDv7 เป็นตัวอย่างของ ID ที่รวมองค์ประกอบของเวลาเข้ากับหมายเลขลำดับ
  • การจัดตารางเธรดอาจส่งผลต่อความแม่นยำของการประทับเวลาในระบบหลายคอร์
  • UUID เวอร์ชัน 4 (สุ่ม) สามารถใช้เพื่อรับประกันตัวระบุที่ไม่ซ้ำกันได้
  • บางคนแก้ปัญหาการชนกันด้วยการตรวจสอบเวลาและการทดสอบพร้อมตั้งค่าตัวแปรโกลบอลแบบอะตอมมิก
  • Erlang/Elixir แยกความแตกต่างระหว่างเวลาแบบโมโนโทนิกและแบบโมโนโทนิกอย่างเคร่งครัด
  • นาฬิกาคอมพิวเตอร์อาจไม่มีความละเอียดระดับนาโนวินาที
  • มีเรื่องเล่ากันว่า Lotus Notes ใช้การประทับเวลาที่มีความละเอียด 1 วินาทีเป็น ID ที่ไม่ซ้ำกัน
  • รอบสัญญาณนาฬิกา CPU และการเพิ่มประสิทธิภาพของคอมไพเลอร์อาจส่งผลต่อความละเอียดของการประทับเวลา
  • เวลาที่แม่นยำอาจเป็นปัญหาด้านความปลอดภัยได้ ดังนั้นผู้ออกแบบ CPU จึงจงใจใส่ clock jitter เข้าไป