บทสรุป

ใน Python 3.14 รุ่น free-threaded นั้น asyncio ได้ ยกเลิก Global Interpreter Lock (GIL) และ เปลี่ยนไปใช้การจัดการสถานะแยกตามแต่ละเธรด ทำให้สามารถรันแบบขนานได้อย่างแท้จริง ผลลัพธ์คือ ประสิทธิภาพขยายตัวแบบเชิงเส้นตามจำนวนเธรด และสามารถรันหลาย event loop แบบขนานได้ เปิดโอกาสใหม่ให้กับแอปพลิเคชัน asyncio แบบมัลติเธรดสมรรถนะสูง


การเปลี่ยนแปลงสำคัญ

  • ยกเลิก GIL (Global Interpreter Lock): free-threaded build ของ CPython ได้ลบ GIL ออก ทำให้หลายเธรดสามารถรันโค้ด Python พร้อมกันได้
  • รับประกันความปลอดภัยของเธรด: asyncio ใช้ การจัดการสถานะแยกตามแต่ละเธรด แทนโครงสร้างข้อมูลแบบโกลบอล เพื่อให้ปลอดภัยต่อการใช้งานหลายเธรด
    • การเก็บงาน: ใช้ รายการเชื่อมโยงคู่แบบวงกลมแยกตามเธรด แทน WeakSet แบบโกลบอล เพื่อลดการแข่งขันในการล็อกและโอเวอร์เฮดจาก weak reference
    • การเก็บงานปัจจุบัน: เก็บ "งานปัจจุบัน" ไว้ในสถานะของเธรด ทำให้เข้าถึงได้เร็วขึ้นและไม่ต้องใช้ล็อก

การปรับปรุงประสิทธิภาพ

  • ประสิทธิภาพขยายตัวแบบเชิงเส้น: ผลการทดสอบ benchmark แสดงให้เห็นว่า ใน free-threaded build ประสิทธิภาพของ asyncio เพิ่มขึ้นแบบเชิงเส้น ตามจำนวนเธรดที่เพิ่มขึ้น
  • TCP benchmark: เมื่อเทียบกับ build ที่ยังเปิดใช้ GIL พบว่า free-threaded build ให้ throughput สูงขึ้นอย่างมาก
  • Web scraping benchmark: ในการทดสอบ web scraping ด้วย aiohttp เมื่อใช้ worker หลายตัวบน free-threaded build พบว่า ประสิทธิภาพดีขึ้นมากกว่า 2 เท่า

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น