โพสต์นี้จากผู้สร้าง Python Guido Van Rossum กล่าวถึงความพยายามในการลบ GIL ออกจาก Python:
สิ่งนี้เคยลองมาแล้วด้วยผลลัพธ์ที่น่าผิดหวังซึ่งเป็นเหตุผลว่าทำไมฉันถึงลังเลที่จะใช้ความพยายามอย่างมากกับตัวเอง ในปี 1999 Greg Stein (กับ Mark Hammond?) ผลิต Python หนึ่งตัว (1.5 ฉันเชื่อ) ที่เอา GIL ออกมาแทนที่ด้วยการล็อกอย่างละเอียดในโครงสร้างข้อมูลที่ไม่แน่นอนทั้งหมด เขายังส่งแพตช์ที่ลบการเชื่อมโยงจำนวนมากกับโครงสร้างข้อมูลที่ไม่แน่นอนในระดับโลกซึ่งฉันยอมรับ อย่างไรก็ตามหลังจากการเปรียบเทียบมันแสดงให้เห็นว่าแม้บนแพลตฟอร์มที่มีการล็อกแบบเร็วที่สุด (Windows ในเวลานั้น) มันทำให้การประมวลผลแบบเธรดเดี่ยวช้าลงเกือบสองเท่าซึ่งหมายความว่าบน CPU สองตัวคุณสามารถทำงานได้มากขึ้น เสร็จสิ้นโดยไม่มี GIL มากกว่าใน CPU ตัวเดียวที่มี GIL นี่ยังไม่เพียงพอและแพทช์ของเกร็กก็หายไป (ดูการเขียนของ Greg เกี่ยวกับประสิทธิภาพ)
ฉันแทบจะไม่สามารถโต้แย้งกับผลลัพธ์ที่แท้จริงได้ แต่ฉันสงสัยว่าทำไมสิ่งนี้ถึงเกิดขึ้น เหตุผลหลักที่การลบ GIL ออกจาก CPython นั้นยากมากก็คือเนื่องจากระบบการจัดการหน่วยความจำการอ้างอิงที่อ้างอิง โปรแกรม Python ทั่วไปจะเรียกใช้Py_INCREF
และเป็นPy_DECREF
พัน ๆ ครั้งหรือหลายล้านครั้งทำให้เป็นประเด็นการแข่งขันที่สำคัญหากเราต้องล้อมรอบล็อค
แต่ฉันไม่เข้าใจว่าทำไมการเพิ่มแบบดั้งเดิมของอะตอมจึงทำให้โปรแกรมเธรดเดี่ยวช้าลง สมมติว่าเราเพิ่งแก้ไข CPython เพื่อให้ตัวแปร refcount ในแต่ละวัตถุ Python เป็นแบบดั้งเดิมอะตอมมิก จากนั้นเราก็ทำการเพิ่มอะตอม (คำสั่งการดึงและเพิ่ม) เมื่อเราต้องการเพิ่มจำนวนการอ้างอิง สิ่งนี้จะทำให้ Python อ้างอิงการนับเธรดปลอดภัยและไม่ควรมีการปรับประสิทธิภาพใด ๆ ในแอปพลิเคชันแบบเธรดเดียวเนื่องจากจะไม่มีการช่วงชิงการล็อก
แต่อนิจจาหลายคนที่ฉลาดกว่าฉันได้ลองและล้มเหลวดังนั้นเห็นได้ชัดว่าฉันขาดอะไรบางอย่างที่นี่ เกิดอะไรขึ้นกับวิธีที่ฉันดูปัญหานี้