แพตเทิร์นการออกแบบสำหรับแอปพลิเคชัน C++ แบบหน่วงต่ำ
- ผู้เขียน: Paul Bilokon, Burak Gunduz
- วันที่ส่ง: 8 กันยายน 2023
- หัวข้อ: การเพิ่มประสิทธิภาพโค้ดแบบหน่วงต่ำ โดยเน้นเป็นพิเศษที่ระบบการซื้อขายความถี่สูง (HFT)
การมีส่วนสำคัญ
- การสร้างคลังเก็บการเขียนโปรแกรมแบบหน่วงต่ำ: เป็นคู่มือเชิงปฏิบัติ พร้อมการทำเบนช์มาร์กทางสถิติอย่างเข้มงวด
- การเพิ่มประสิทธิภาพกลยุทธ์อาร์บิทราจเชิงสถิติแบบเป็นกลางต่อภาวะตลาด: ปรับปรุงอย่างมีนัยสำคัญทั้งด้านความเร็วและความสามารถในการทำกำไร
- การนำแพตเทิร์น Disruptor ไปใช้ใน C++: ให้ประสิทธิภาพดีกว่าวิธีการจัดคิวแบบดั้งเดิม
ตัวชี้วัดการประเมิน
- ความเร็ว
- การใช้ประโยชน์จากแคช
- นัยสำคัญทางสถิติ เป็นต้น
เทคโนโลยีหลัก
- การวอร์มแคช: ลดเวลาแฝงด้วยการเตรียมแคชล่วงหน้า
- Constexpr: เพิ่มประสิทธิภาพด้วยการประเมินค่าคงที่ในเวลาคอมไพล์
ทิศทางในอนาคต
- ขยายคลังเก็บ
- ทดสอบอัลกอริทึมการซื้อขายที่ปรับแต่งแล้วในสภาพแวดล้อมการซื้อขายจริงแบบเรียลไทม์
- ผสานแพตเทิร์น Disruptor กับอัลกอริทึมการซื้อขายเพื่อทำเบนช์มาร์กระบบแบบครบวงจร
ผู้อ่านเป้าหมาย
- ผู้ปฏิบัติงานทั้งในแวดวงวิชาการและอุตสาหกรรม
สรุปโดย GN⁺
บทความนี้กล่าวถึงแพตเทิร์นการออกแบบเพื่อปรับปรุงประสิทธิภาพของแอปพลิเคชันแบบหน่วงต่ำ โดยเฉพาะระบบการซื้อขายความถี่สูง โดยคลังเก็บการเขียนโปรแกรมแบบหน่วงต่ำและการนำแพตเทิร์น Disruptor ไปใช้จะเป็นคู่มือที่มีประโยชน์สำหรับผู้ปฏิบัติงาน เทคนิคอย่างการวอร์มแคชและ Constexpr มีส่วนอย่างมากในการลดเวลาแฝง และบทความนี้จะเป็นประโยชน์อย่างยิ่งสำหรับผู้ที่สนใจการเพิ่มประสิทธิภาพ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เป็นบทเกริ่นนำสั้น ๆ เกี่ยวกับหัวข้อนี้
นักศึกษาปริญญาตรีรู้องค์ประกอบพื้นฐานของการปรับแต่งประสิทธิภาพอยู่แล้ว
น่าแปลกที่ไม่ได้พูดถึง false sharing ซึ่งเป็นปัจจัยที่ทำให้ประสิทธิภาพลดลง
น่าแปลกเช่นกันที่ไม่ได้พูดถึง optimization hint attributes เช่น
[[likely]],[[unlikely]]ไม่ได้ครอบคลุมองค์ประกอบการปรับแต่งประสิทธิภาพขั้นสูง
สิ่งที่โปรแกรมเมอร์สาย low-latency ต้องมีคือความระแวดระวังต่อการจัดสรรหน่วยความจำและการคัดลอกที่ไม่จำเป็น
ตอนเขียนเซิร์ฟเวอร์แบบ low-latency จึงตระหนักได้ว่า vector IO ทำงานช้ากว่าการคัดลอกอ็อบเจ็กต์ขนาดเล็กไปยัง contiguous buffer
ผลการทดสอบให้ค่า t-statistic และ p-value
ส่วนนี้ดูเหมือนเขียนด้วย LLM
ตัวอย่างที่วิเคราะห์ราคาปิดวันละครั้งเป็นเวลา 5 ปี แล้วคำนวณสเปรดด้วย latency 65 ไมโครวินาทีนั้นดูแปลก
แชร์ implementation ของตลาดหลักทรัพย์ที่เขียนด้วย C++
เขียนไลบรารี logging สำหรับ C++
ประสิทธิภาพของ compile-time dispatch มาจากการที่การตัดสินใจเรียกฟังก์ชันเกิดขึ้นตั้งแต่ขั้นตอนคอมไพล์
แชร์สไลด์จากงาน CppCon 2017
ตั้งคำถามว่ามีเหตุผลใดหรือไม่ที่ high-frequency trading ควรมีอยู่