อนุญาตให้ปิดใช้งาน 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 กับความเสถียร
ยังไม่มีความคิดเห็น