เทคโนโลยีพื้นฐานที่สนับสนุน Java Nio และ Nodejs
อย่างที่เราทราบกันดีว่าการสนับสนุน Java Nio และ NiO2 ได้ถูกเพิ่มเข้าไปใน Java เวอร์ชันล่าสุด ในเวลาเดียวกันหนึ่งในข้อได้เปรียบที่ได้รับการยกย่องมากที่สุดของสแต็คเทคโนโลยี NodeJS คือ IO ที่มีประสิทธิภาพสูง ดังนั้นหัวข้อที่เราจะพูดถึงในวันนี้คือเทคโนโลยีพื้นฐานที่สนับสนุนเทคโนโลยีเหล่านี้
คำถามหนึ่งที่ต้องถามก่อนเริ่มคือ:
ทำไม Nodejs และ Java NiO2 ถึงไม่ปรากฏขึ้นก่อนหน้านี้?
คำตอบ: โดยส่วนตัวแล้วฉันคิดว่าเทคโนโลยีการสนับสนุนพื้นฐานยังไม่เป็นผู้ใหญ่
ดังนั้นเทคโนโลยีพื้นฐานหมายถึงอะไร? ใช่ฉันคิดว่าหลายคนเดาว่าเป็นเทคโนโลยีระบบปฏิบัติการ แนวคิดทั้งสองที่เสนอในบทความนี้ Java NiO2 และ NodeJS เป็นเทคโนโลยีของผู้ใช้รัฐหรือเทคโนโลยีแอปพลิเคชันชั้นและเทคโนโลยีแอปพลิเคชันชั้นเหล่านี้ทำงานบนระบบปฏิบัติการ ในเวลาเดียวกันด้วยความก้าวหน้าของระบบปฏิบัติการโมเดลการเขียนโปรแกรมที่สามารถรองรับได้ก็ยิ่งดีขึ้นเช่นกัน อาจกล่าวได้ว่าเทคโนโลยีทั้งสองนี้ได้รับการพัฒนาอย่างสมบูรณ์เพื่อใช้เงินปันผลที่เกิดจากความคืบหน้าของระบบปฏิบัติการ โดยทั่วไปแล้วเทคโนโลยีที่สนุกกับโบนัสนี้เป็นครั้งแรกจะต้องเป็น C/C ++ เนื่องจากความก้าวหน้าล่าสุดในระบบปฏิบัติการให้การโทรระบบและ C/C ++ เป็นสิ่งที่สะดวกที่สุดในการใช้การโทรระบบเหล่านี้ แต่ก็ซับซ้อนที่สุด เพื่อให้ได้ประสิทธิภาพเดียวกันแพลตฟอร์มอื่น ๆ จะต้องพัฒนาและแพ็คเกจอย่างต่อเนื่องเพื่อให้ผู้ใช้สามารถใช้เงินปันผลเหล่านี้ได้ เมื่อแพลตฟอร์มนั้นซบเซาและอัปเดตแล้วก็ถึงเวลาที่แพลตฟอร์มนี้จะลดลง ยิ่งสะดวกมากเท่าไหร่ก็ยิ่งมีความเป็นมิตรกับผู้ใช้มากเท่าไหร่และยิ่งมีคนใช้มากขึ้นเท่านั้น แม้ว่าหลายคนสามารถเขียนโค้ดได้อย่างรวดเร็วตามแพลตฟอร์มเหล่านี้พวกเขามักจะไม่เข้าใจสาระสำคัญเพราะพวกเขาไม่เข้าใจแรงจูงใจและหลักการของเทคโนโลยีเหล่านี้เป็นหลัก เทคโนโลยีที่เรากำลังพูดถึงด้านล่างเป็นเทคโนโลยีพื้นฐานที่เกี่ยวข้องกับเทคโนโลยีทั้งสองนี้
ไม่ว่าการออกแบบระบบปฏิบัติการแบบใดรุ่น IO 5 รุ่นต่อไปนี้จะเป็นสิ่งจำเป็น
1. การปิดกั้น I/O
2. การไม่ปิดกั้น I/O
3. I/O มัลติเพล็กซิ่ง (เลือก, โพลและ epoll)
4. ไดรฟ์สัญญาณ I/O (SIGIO)
5. I/O แบบอะซิงโครนัส (ฟังก์ชั่น posix aio_)
1. การปิดกั้น I/O
ดังที่แสดงในรูปข้อได้เปรียบของโมเดล IO นี้คือมันง่ายต่อการโปรแกรมและยังเป็นหนึ่งในรุ่น IO ที่เก่าแก่ที่สุดที่สนับสนุนโดย OS ข้อเสียคือการเรียกใช้การดำเนินการเธรดแบบไดนามิกของผู้ใช้บล็อกทำให้เกิดเวลา CPU ที่สูญเปล่าและประสิทธิภาพ IO ต่ำ
2. การไม่ปิดกั้น I/O
ดังที่แสดงในรูปการปรับปรุงโมเดล IO นี้คือ IO ไม่ปิดกั้น แต่มันต้องมีการสำรวจระยะยาวซึ่งยังสูญเสียวัฏจักรนาฬิกา CPU
3. I/O มัลติเพล็กซิ่ง (เลือก, โพลและ epoll)
ดังที่แสดงในรูปแบบ IO นี้เป็นรุ่น IO ที่เสถียรที่สุดที่ OS จัดทำขึ้นในวันนี้ แอพพลิเคชั่นกระแสหลักส่วนใหญ่สร้างขึ้นในรุ่น IO นี้เช่น NodeJS อย่างไรก็ตามแพลตฟอร์มเหล่านี้มักจะเพิ่มเลเยอร์ของการห่อหุ้มให้กับรุ่นนี้เพื่อรองรับ AIO โดยตรง
4. ไดรฟ์สัญญาณ I/O (SIGIO)
ดังที่แสดงในรูปข้อมูลบันทึกว่าโมเดล IO นี้ไม่มีข้อได้เปรียบด้านประสิทธิภาพในการเปรียบเทียบโมเดล 3 และไม่ค่อยใช้โดยนักออกแบบเนื่องจากความไม่แน่นอนในการสนับสนุนระบบ
5. I/O แบบอะซิงโครนัส (ฟังก์ชั่น posix aio_)
ดังที่แสดงในรูปแบบ IO นี้เป็น AIO ที่สมบูรณ์แบบที่สุดและโมเดลการเขียนโปรแกรมก็ง่ายที่สุด แต่มี OSE น้อยมากที่สามารถรองรับโมเดลได้อย่างสมบูรณ์แบบ ข้อมูลออนไลน์แสดงให้เห็นว่า Linux กำลังพยายามในเรื่องนี้ เมื่อระบบปฏิบัติการมีความคืบหน้าในด้านนี้กรอบการเขียนโปรแกรมแพลตฟอร์มและรูปแบบการเขียนโปรแกรมอาจยังคงต้องง่ายขึ้นอย่างมาก
แม้ว่ารุ่นนี้จะไม่ค่อยได้รับการสนับสนุนจากระบบปฏิบัติการ แต่ก็ไม่ได้หมายความว่าตอนนี้ไม่มีรุ่น AIO ดังกล่าว เฟรมเวิร์กจำนวนมากได้ทำด้านนี้และจำลอง AIO ในโหมดผู้ใช้ทำให้ผู้ใช้สามารถให้ความสนใจกับรหัสตรรกะทางธุรกิจได้มากขึ้น
6. อะซิงโครนัสซิงโครนัสปิดกั้นและไม่ปิดกั้น
ซิงโครนัสและอะซิงโครนัสมีไว้สำหรับการโต้ตอบระหว่างแอปพลิเคชันและเคอร์เนล ข้อมูลจะถูกอ่านและจากนั้นการส่งคืนจะเป็นแบบซิงโครนัสและการส่งคืนเป็นแบบอะซิงโครนัส การปิดกั้นและการไม่ปิดกั้นใช้สำหรับกระบวนการและเธรด เธรดการอ่านหรือเขียนกำลังรออยู่ในโหมดการปิดกั้นแทนที่จะเป็นโหมดการปิดกั้นเธรดการอ่านหรือเขียนจะส่งคืนค่าสถานะทันที
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น