9
I / O แบบไม่ปิดกั้นเร็วกว่า I / O การบล็อกแบบมัลติเธรดจริงหรือไม่ อย่างไร?
ฉันค้นหาเว็บเกี่ยวกับรายละเอียดทางเทคนิคบางอย่างเกี่ยวกับการบล็อก I / O และการไม่บล็อก I / O และพบว่ามีหลายคนที่ระบุว่า I / O ที่ไม่ปิดกั้นจะเร็วกว่าการบล็อก I / O ตัวอย่างเช่นในเอกสารนี้ หากฉันใช้การบล็อก I / O แน่นอนว่าเธรดที่ถูกบล็อกในขณะนี้จะไม่สามารถทำอย่างอื่นได้ ... เพราะถูกบล็อก แต่ทันทีที่เธรดเริ่มถูกบล็อก OS สามารถเปลี่ยนไปใช้เธรดอื่นและไม่เปลี่ยนกลับจนกว่าเธรดที่ถูกบล็อกจะมีบางอย่าง ตราบใดที่มีเธรดอื่นในระบบที่ต้องการ CPU และไม่ถูกบล็อกก็ไม่ควรมีเวลาว่างของ CPU อีกต่อไปเมื่อเทียบกับวิธีการไม่บล็อกตามเหตุการณ์หรือไม่? นอกเหนือจากการลดเวลาที่ CPU ไม่ได้ใช้งานแล้วฉันยังเห็นอีกหนึ่งทางเลือกในการเพิ่มจำนวนงานที่คอมพิวเตอร์สามารถทำได้ในกรอบเวลาที่กำหนด: ลดค่าใช้จ่ายที่แนะนำโดยการสลับเธรด แต่จะทำได้อย่างไร? และค่าใช้จ่ายสูงพอที่จะแสดงเอฟเฟกต์ที่วัดได้หรือไม่? นี่คือแนวคิดเกี่ยวกับวิธีการที่ฉันสามารถวาดภาพได้: ในการโหลดเนื้อหาของไฟล์แอปพลิเคชันจะมอบหมายงานนี้ให้กับเฟรมเวิร์ก i / o ตามเหตุการณ์โดยส่งผ่านฟังก์ชันเรียกกลับพร้อมกับชื่อไฟล์ เฟรมเวิร์กเหตุการณ์มอบหมายให้กับระบบปฏิบัติการซึ่งตั้งโปรแกรมคอนโทรลเลอร์ DMA ของฮาร์ดดิสก์เพื่อเขียนไฟล์ลงในหน่วยความจำโดยตรง เฟรมเวิร์กเหตุการณ์อนุญาตให้เรียกใช้โค้ดเพิ่มเติมได้ เมื่อเสร็จสิ้นการคัดลอกจากดิสก์สู่หน่วยความจำตัวควบคุม DMA …