libuv ไลบรารีข้ามแพลตฟอร์มที่ใช้ในหลายโปรเจ็กต์สำหรับการสนับสนุน I/O

ลิบุฟ

libuv เป็นไลบรารีการสนับสนุนข้ามแพลตฟอร์มโดยเน้นที่ I/O แบบอะซิงโครนัส

เพิ่งเป็นที่รู้จัก การเปิดตัวไลบรารี libuv เวอร์ชันใหม่ 1.45.0 ซึ่งใช้กันอย่างแพร่หลายสำหรับการเชื่อมต่อมัลติเพล็กซิ่งและการประมวลผล I/O แบบอะซิงโครนัสในหลายโปรเจ็กต์ที่มุ่งไปที่การประมวลผลไฟล์และคำขอเครือข่ายที่มีประสิทธิภาพสูง ตัวอย่างเช่น บนแพลตฟอร์ม Node.js, BIND 9 และ Knot

สำหรับคนที่ไม่รู้เรื่อง libuv ก็ควรรู้ไว้ว่าสิ่งนี้ เป็นไลบรารี C ข้ามแพลตฟอร์มที่ให้การสนับสนุนสำหรับ I/O แบบอะซิงโครนัสตามลูปเหตุการณ์ รองรับ epoll Windows kqueue IOCP, พอร์ตเหตุการณ์ Solaris และบน Linux เป็นหนึ่งในไลบรารี่ที่รองรับ io_uring

เกี่ยวกับ Libuv

ลิบุฟ ได้รับการออกแบบมาเพื่อใช้ใน Node.js เป็นหลัก แต่ก็ถูกใช้โดยโครงการซอฟต์แวร์อื่นๆ เดิมที มันเป็นนามธรรมเกี่ยวกับ libev หรือ Microsoft IOCP เนื่องจาก libev ไม่รองรับ IOCP บน Windows

ห้องสมุด อนุญาตให้จัดกิจกรรมวนซ้ำแบบไม่ปิดกั้น ใช้วิธีการเช่น epoll บน Linux, kqueue บน BSD และ macOS, IOCP บน Windows และพอร์ตเหตุการณ์บน Solaris

ของการ คุณสมบัติที่โดดเด่นของ libuv:

  • ลูปเหตุการณ์เต็มรูปแบบรองรับโดย epoll, kqueue, IOCP, พอร์ตเหตุการณ์
  • ซ็อกเก็ต TCP และ UDP แบบอะซิงโครนัส
  • การแก้ไข DNS แบบอะซิงโครนัส
  • การดำเนินการแบบอะซิงโครนัสของไฟล์และระบบไฟล์
  • เหตุการณ์ของระบบไฟล์
  • TTY ควบคุมรหัส Escape ANSI
  • IPC พร้อมการแบ่งปันซ็อกเก็ตโดยใช้ซ็อกเก็ตโดเมน Unix หรือไพพ์ที่มีชื่อ (Windows)
  • กระบวนการรอง
  • พูลเธรด
  • การจัดการสัญญาณ
  • นาฬิกาความละเอียดสูง
  • การทำเกลียวและการซิงโครไนซ์เบื้องต้น

คุณสมบัติข้ามแพลตฟอร์มพร้อมใช้งานสำหรับแอปพลิเคชันเพื่อทำงานกับการเชื่อมต่อเครือข่าย TCP และ UDP ในโหมดอะซิงโครนัส, ความละเอียด DNS แบบอะซิงโครนัส, การทำงานแบบอะซิงโครนัสกับไฟล์, การติดตามเหตุการณ์ระบบไฟล์, การจัดระเบียบ IPC สำหรับการแชร์ซ็อกเก็ต, การจัดการสัญญาณเธรดพูล การประมวลผลและการใช้ ตัวจับเวลาที่มีความแม่นยำสูง

ห้องสมุด ยังรวมถึงพื้นฐานเพื่อจัดระเบียบการดำเนินการแบบมัลติเธรด และการซิงโครไนซ์เธรด นอกจากการวนรอบเหตุการณ์แล้ว ยังใช้พื้นฐานนามธรรมระดับสูงสองรายการ ได้แก่ "ตัวจัดการ" เพื่อนำวัตถุที่มีอายุยืนยาวไปใช้ซึ่งดำเนินการหลายอย่าง และ "คำขอ" เพื่อดำเนินการคำขออายุสั้น

คุณสมบัติใหม่หลักของ libuv 1.45

การปรับปรุงที่สำคัญในเวอร์ชันใหม่คือ การดำเนินการสนับสนุนที่รอคอยมานานสำหรับอินเทอร์เฟซ I/O แบบอะซิงโครนัส io_uring จัดทำโดยเคอร์เนล Linux ตั้งแต่เวอร์ชัน 5.1

นอกจากนี้ ยังเน้นที่ รองรับการสำรวจ I/O และความสามารถในการทำงานทั้งที่มีและไม่มีการบัฟเฟอร์ ด้วย io_uring API นักพัฒนาเคอร์เนลพยายามแก้ไขข้อบกพร่องของอินเทอร์เฟซ aio แบบเก่า ในแง่ของประสิทธิภาพ io_uring นั้นใกล้เคียงกับ SPDK มาก และมีประสิทธิภาพสูงกว่า libaio อย่างมากเมื่อเปิดใช้การสำรวจ

ใน libuv, อินเทอร์เฟซ io_uring สามารถใช้บนแพลตฟอร์ม Linux ที่มีเคอร์เนล 5.1+ ในแบบดั้งเดิมการจัดการไฟล์แบบอะซิงโครนัส เช่น อ่าน เขียน fsync fdatasync stat fstat และ lstat บนระบบปฏิบัติการอื่นและระบบที่มีเคอร์เนลเก่า เธรดพูลยังคงใช้อยู่

มีการกล่าวว่าการทดสอบประสิทธิภาพแสดงให้เห็นว่าการใช้ io_uring ใน libuv สามารถเพิ่มประสิทธิภาพได้ถึง 8 เท่า การเพิ่ม io_uring ลงใน libuv ได้รับการสนับสนุนโดย ISC (Internet Systems Consortium) ซึ่งใช้ไลบรารีที่เป็นปัญหาบนเซิร์ฟเวอร์ BIND DNS

การปรับปรุงอื่นๆ ในเวอร์ชันใหม่ ได้แก่ การตั้งค่าขนาดฮีป 8 MB เดียวสำหรับเธรดพูลบนสถาปัตยกรรมทั้งหมด และแพลตฟอร์ม

นอกจากนี้ยังมีการเน้นย้ำว่า เพิ่ม API ใหม่ uv_metrics_info() เพื่อรวบรวมเมตริก เช่น จำนวนการวนซ้ำในลูปเหตุการณ์ จำนวนเหตุการณ์ทั้งหมดที่ประมวลผล และจำนวนเหตุการณ์ที่รออยู่ในคิว ณ เวลาที่ส่งคำขอ

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม คุณควรทราบว่ารหัสโครงการเขียนด้วยภาษา C และเผยแพร่ภายใต้ใบอนุญาต MIT ท่านสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้. 


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา