อนุญาตให้ปิดใช้งาน GIL

  • สามารถปิดใช้งาน GIL (Global Interpreter Lock) ได้โดยตั้งค่า PYTHON_GIL=0 หรือ -X gil=0
  • โครงสร้างข้อมูลที่เกี่ยวข้องกับ GIL จะยังถูกเริ่มต้นใช้งาน แต่เมื่อปิด GIL แล้ว take_gil() และ drop_gil() จะคืนค่ากลับตั้งแต่เนิ่นๆ
  • มีการลองรันการทดสอบบางส่วนและโปรแกรมขนาดเล็กในสถานะที่ปิด GIL แล้ว และโปรแกรมแบบเธรดพื้นฐานก็ยังทำงานได้เป็นบางครั้ง
  • หากพยายามรันชุดทดสอบทั้งหมด จะเกิดการล่มอย่างรวดเร็วที่ test_asyncio

เพิ่มกลไกการปิดใช้งาน GIL

  • มีการพูดคุยเกี่ยวกับอิสชู (#116167) สำหรับการเพิ่มกลไกปิดใช้งาน GIL
  • มีการเพิ่มความสามารถในการปิดใช้งาน GIL ใน free-threaded build
  • มีการติดตามงานสำหรับการเปิดใช้งาน GIL กลับคืน (#116322) และการปิดใช้งาน GIL เป็นค่าเริ่มต้น (#116329)

การรีวิวโค้ดและการทดสอบ

  • มีการพูดคุยเกี่ยวกับการขอรีวิวโค้ดและการเพิ่มเคสทดสอบ
  • มีข้อเสนอให้จัดทำเอกสารสำหรับตัวแปรสภาพแวดล้อม PYTHON_GIL และรับฟังข้อเสนอแนะจากผู้ใช้
  • รวมถึงการเพิ่มออปชัน -X gil การสะท้อนค่าใน sys.flags และการแก้ไขการทดสอบที่จัดการตัวแปรสภาพแวดล้อม

ความเห็นของ GN⁺

  • การเปลี่ยนแปลงนี้อาจส่งผลอย่างมากต่อชุมชน Python เพราะ GIL เป็นองค์ประกอบที่เป็นที่รู้จักกันดีว่าจำกัดประสิทธิภาพของการทำงานหลายเธรดใน Python
  • ความสามารถในการปิดใช้งาน GIL อาจช่วยเพิ่มประสิทธิภาพได้ แต่ในขณะเดียวกันก็อาจก่อให้เกิดปัญหาด้านเสถียรภาพและความเข้ากันได้ จึงต้องใช้แนวทางที่รอบคอบ
  • การรัน Python โดยไม่มี GIL อาจให้ประโยชน์โดยเฉพาะกับงานที่เกี่ยวข้องกับการประมวลผลแบบขนาน แต่โค้ด Python เดิมจำนวนมากถูกเขียนขึ้นโดยตั้งสมมติฐานว่ามี GIL อยู่ ดังนั้นจึงสำคัญที่จะต้องประเมินผลกระทบจากการเปลี่ยนแปลงนี้
  • ในภาษาและรันไทม์อื่นๆ จำนวนมากมักไม่มีการใช้กลไกที่คล้ายกับ GIL เช่น Node.js ใช้แนวทางเพิ่มประสิทธิภาพแบบเธรดเดียวสูงสุดผ่าน asynchronous I/O
  • เมื่อนำเทคโนโลยีนี้มาใช้ ควรตรวจสอบความปลอดภัยด้านเธรดของโค้ดเดิม และพิจารณารีแฟกเตอร์หากจำเป็น สิ่งสำคัญคือการรักษาสมดุลระหว่างประโยชน์ด้านประสิทธิภาพจากการปิด GIL กับความเสถียร

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

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