สมมติว่ามีสองเธรดซึ่งสื่อสารโดยการส่งข้อความข้อมูลแบบอะซิงโครนัสซึ่งกันและกัน แต่ละเธรดมีคิวข้อความบางประเภท
คำถามของฉันอยู่ในระดับต่ำมาก: สิ่งที่คาดว่าจะเป็นวิธีที่มีประสิทธิภาพที่สุดในการจัดการหน่วยความจำ? ฉันสามารถคิดถึงวิธีแก้ปัญหาต่าง ๆ :
new
ผู้ส่งสร้างวัตถุผ่านdelete
โทรผู้รับ- Memory pooling (เพื่อโอนหน่วยความจำกลับไปยังผู้ส่ง)
- การรวบรวมขยะ (เช่น Boehm GC)
- (ถ้าวัตถุมีขนาดเล็กพอ) คัดลอกตามค่าเพื่อหลีกเลี่ยงการจัดสรรฮีปอย่างสมบูรณ์
1) เป็นคำตอบที่ชัดเจนที่สุดดังนั้นฉันจะใช้มันสำหรับต้นแบบ มีโอกาสที่มันจะดีอยู่แล้ว แต่เป็นอิสระจากปัญหาเฉพาะของฉันฉันสงสัยว่าเทคนิคใดมีแนวโน้มมากที่สุดหากคุณกำลังปรับประสิทธิภาพการทำงานให้ดีที่สุด
ฉันคาดหวังว่าการรวมกันจะดีที่สุดในทางทฤษฎีโดยเฉพาะอย่างยิ่งเพราะคุณสามารถใช้ความรู้เพิ่มเติมเกี่ยวกับการไหลของข้อมูลระหว่างเธรด อย่างไรก็ตามฉันกลัวว่ามันเป็นการยากที่จะทำถูกที่สุด การปรับแต่งมากมาย ... :-(
การรวบรวมขยะควรเพิ่มได้อย่างง่ายดายหลังจากนั้น (หลังจากโซลูชันที่ 1) และฉันคาดว่ามันจะทำงานได้ดีมาก ดังนั้นฉันคิดว่ามันเป็นวิธีแก้ปัญหาที่ใช้งานได้จริงหาก 1) กลายเป็นว่าไม่มีประสิทธิภาพเกินไป
หากวัตถุมีขนาดเล็กและเรียบง่ายการคัดลอกตามค่าอาจเร็วที่สุด อย่างไรก็ตามฉันกลัวว่ามันจะบังคับให้มีข้อ จำกัด ที่ไม่จำเป็นในการใช้งานข้อความที่รองรับดังนั้นฉันจึงต้องการหลีกเลี่ยง