"เส้นทางร้อน" หมายความว่าอย่างไรในบริบทของการซิงค์เมื่อ?


14

เวอร์ชั่น go: 1.13.4 ในการซิงค์ซอร์สโค้ด / Once.goความคิดเห็นต่อไปนี้กล่าวถึง "เส้นทางร้อน":

type Once struct {
    // done indicates whether the action has been performed.
    // It is first in the struct because it is used in the hot path.
    // The hot path is inlined at every call site.
    // Placing done first allows more compact instructions on some architectures (amd64/x86),
    // and fewer instructions (to calculate offset) on other architectures.
    done uint32
    m    Mutex
}

คำถามของฉันคือ:

  1. "เส้นทางร้อน" หมายความว่าอะไรที่นี่

  2. "นี่เป็นครั้งแรกใน struct" หรือไม่ที่จะทำให้การเข้าถึง "ฮอตพา ธ " มีประสิทธิภาพมากขึ้นหรือไม่ ทำไม?


ทำไมการวางฟิลด์ก่อนจึงเป็นที่ต้องการมากกว่าจะอธิบายในประโยคสุดท้าย มีอะไรที่ไม่ชัดเจนเกี่ยวกับเรื่องนี้?
ปีเตอร์

คำตอบ:


10

เส้นทางร้อนเป็นลำดับของคำสั่งที่ดำเนินการบ่อยครั้งมาก

เมื่อเข้าถึงฟิลด์แรกของโครงสร้างเราสามารถยกเลิกการชี้โดยตรงไปยังโครงสร้างเพื่อเข้าถึงฟิลด์แรก ในการเข้าถึงฟิลด์อื่น ๆ เราจำเป็นต้องให้ออฟเซ็ตจากค่าแรกนอกเหนือจากตัวชี้ struct

ในรหัสเครื่องออฟเซ็ตนี้เป็นค่าเพิ่มเติมที่จะผ่านไปพร้อมกับคำสั่งซึ่งทำให้ใช้งานได้นานขึ้น ผลกระทบด้านประสิทธิภาพคือ CPU ต้องดำเนินการเพิ่มออฟเซ็ตไปยังตัวชี้โครงสร้างเพื่อรับค่าที่อยู่ของการเข้าถึง

ดังนั้นรหัสเครื่องในการเข้าถึงฟิลด์แรกของ struct นั้นมีขนาดเล็กและรวดเร็วกว่า

โปรดทราบว่านี่ถือว่าโครงร่างของค่าเขตข้อมูลในหน่วยความจำเหมือนกับในคำนิยาม struct


คุณสามารถขยายประโยคสุดท้ายได้หรือไม่? เช่นนั้นจะไม่เป็นเช่นนั้น?
colminator

@colminator คอมไพเลอร์สามารถตัดสินใจเปลี่ยนลำดับฟิลด์ของโครงสร้างในหน่วยความจำเพื่อปรับพื้นที่จัดเก็บให้เหมาะสมเช่น คอมไพเลอร์ go ไม่ได้ทำเท่าที่ฉันรู้
chmike

1
@ chmike ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมของคุณ ฉันต้องการทราบว่าหมายความว่าฉันควรใส่เขตข้อมูลที่เข้าถึงบ่อยในสถานที่แรกของ struct ในงานประจำวันของฉันหรือไม่
Yalou Wang

1
@YalouWang มันเป็นการเพิ่มประสิทธิภาพเล็กน้อย มันคุ้มค่ากับความพยายามหากประสิทธิภาพเป็นสิ่งสำคัญ
chmike
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.