เจาะลึก TonIO: รันไทม์ตัวใหม่ที่ปลดล็อกพลัง Python ให้ใช้ CPU ได้เต็มสูบ

อ่าน 3 นาที 1 ผู้อ่าน

เจาะลึก TonIO: รันไทม์ตัวใหม่ที่ปลดล็อกพลัง Python ให้ใช้ CPU ได้เต็มสูบ

จบปัญหา Python วิ่งแค่คอร์เดียวด้วย TonIO

ปกติแล้วโค้ด Python ที่เราเขียนแบบ Async (การทำงานแบบไม่ต้องรอให้อีกงานเสร็จก่อน) มักจะวิ่งอยู่บน CPU เพียงแค่คอร์เดียวเท่านั้น ต่อให้เครื่องคุณจะมี 10 หรือ 18 คอร์ก็ตาม นี่ไม่ใช่บั๊ก แต่เป็นดีไซน์ดั้งเดิมของภาษาที่ Giovanni Barillari ผู้สร้าง Granian มองว่ามันถึงเวลาต้องเปลี่ยนใหม่ เขาจึงพัฒนา TonIO ขึ้นมาเพื่อให้ Python ทำงานแบบหลายเธรด (Multi-threaded) ได้จริง ๆ

ทำไมต้องสร้างใหม่แทนที่จะแก้ของเก่า

Giovanni อธิบายว่าหัวใจของปัญหาคือ GIL (Global Interpreter Lock - ตัวล็อกที่ทำให้ Python รันคำสั่งได้ทีละหนึ่งอย่างเท่านั้น) ซึ่งทำให้เราต้องเปิดโปรแกรมซ้ำหลาย ๆ ตัวเพื่อใช้ CPU ให้ครบทุกคอร์ ผลที่ตามมาคือเปลืองหน่วยความจำมหาศาล เขาจึงตัดสินใจเขียน TonIO ขึ้นมาใหม่ทั้งหมดโดยไม่ใช้ asyncio (ชุดคำสั่งมาตรฐานที่ช่วยจัดการงานหลายอย่างพร้อมกัน) เพื่อให้มันทำงานบน Python เวอร์ชัน Free-threaded (Python ที่ถอดตัวล็อก GIL ออกเพื่อให้รันพร้อมกันหลายเธรดได้) ได้อย่างเต็มประสิทธิภาพ

หัวใจหลักของ TonIO

TonIO ได้รับแรงบันดาลใจมาจาก Tokio ของภาษา Rust โดยมีจุดเด่นคือการเริ่มต้นทำงานแบบ Multi-thread ทันทีตามจำนวนคอร์ที่มีอยู่ในเครื่อง แถมยังตัดความซับซ้อนของ asyncio ออกไปเยอะมาก ทำให้โค้ดดูสะอาดและเข้าใจง่ายขึ้น อย่างไรก็ตาม TonIO ยังอยู่ในช่วงเริ่มต้น (Alpha) และยังรองรับการทำงานบน Windows ไม่ได้ในขณะนี้

กฎเหล็กในการใช้งาน

การเปลี่ยนมาใช้ Multi-threaded Python มีกฎสำคัญ 2 ข้อที่ต้องจำให้แม่น ข้อแรกคือห้ามรอ (Await) ภายในตัวล็อก (Lock) เพราะจะทำให้โปรแกรมค้างตายทันที ข้อสองคือต้องระวังเรื่องการใช้ข้อมูลร่วมกัน เพราะไม่มีตัวล็อก GIL คอยปกป้องเราเหมือนเมื่อก่อนแล้ว ผู้พัฒนาต้องมีความรอบคอบในการจัดการสถานะของข้อมูลมากขึ้น

สรุปสั้น ๆ

TonIO เป็นความหวังใหม่สำหรับคนที่ต้องการเพิ่มประสิทธิภาพให้แอปพลิเคชัน Python โดยไม่ต้องแบกรับภาระเรื่องหน่วยความจำจากการเปิดหลายโพรเซส (Process - โปรแกรมที่รันแยกจากกัน) อีกต่อไป แม้จะยังต้องรอการพัฒนาเพิ่มเติม แต่นี่คือการเปลี่ยนแปลงครั้งใหญ่ที่สุดของโลก Python ที่จะช่วยให้การเขียนโปรแกรมรองรับการทำงานหนัก ๆ ได้ดีขึ้นกว่าเดิมมาก

แชร์ข่าวนี้

เรียบเรียงจากข่าวของ Planet Python อ่านข่าวต้นฉบับ ↗

← กลับไปหน้าข่าวสาร