12
mmap () เทียบกับการอ่านบล็อค
ฉันกำลังทำงานกับโปรแกรมที่กำลังประมวลผลไฟล์ที่อาจมีขนาด 100GB ขึ้นไป ไฟล์มีชุดของบันทึกความยาวแปรผัน ฉันได้ติดตั้งและใช้งานเป็นครั้งแรกและตอนนี้ฉันกำลังมองไปที่การปรับปรุงประสิทธิภาพโดยเฉพาะอย่างยิ่งในการทำ I / O ที่มีประสิทธิภาพมากขึ้นเนื่องจากไฟล์อินพุตได้รับการสแกนหลายครั้ง มีกฎง่ายๆในการใช้mmap()กับการอ่านในบล็อกผ่านfstreamห้องสมุดของ C ++ ? สิ่งที่ฉันต้องการจะทำคืออ่านบล็อกขนาดใหญ่จากดิสก์ไปยังบัฟเฟอร์ประมวลผลระเบียนที่สมบูรณ์จากบัฟเฟอร์แล้วอ่านเพิ่มเติม mmap()รหัสอาจจะได้รับมากยุ่งตั้งแต่mmap'd บล็อกต้องนอนบนหน้าขอบเขตขนาด (ความเข้าใจของฉัน) และมีการบันทึกอาจเหมือนข้ามเขตแดนหน้า ด้วยfstreams ฉันสามารถค้นหาจุดเริ่มต้นของการบันทึกและเริ่มอ่านอีกครั้งเนื่องจากเราไม่ จำกัด เฉพาะการอ่านบล็อกที่วางอยู่บนขอบเขตขนาดหน้า ฉันจะตัดสินใจเลือกระหว่างสองตัวเลือกนี้ได้อย่างไร กฎของหัวแม่มือใด ๆ (เช่นmmap()เร็วกว่า 2x) หรือการทดสอบอย่างง่าย?