Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Global Interpreter Lock (GIL) คืออะไร


ในบทความนี้ เราจะมาเรียนรู้เกี่ยวกับ Python Global Interpreter Lock (GIL) คืออะไร

นี่เป็นการล็อกหรืออุปสรรคที่ขัดขวางความพร้อมใช้งานของล่าม Python กับหลายเธรดพร้อมกัน GIL ถูกระบุว่าเป็นข้อบกพร่อง/ปัญหาใน Python 3.x หรือก่อนหน้านี้เนื่องจากไม่อนุญาตให้ทำมัลติเธรดในสถาปัตยกรรมแบบมัลติเธรด

ทำไมถึงเปิดตัว

Python รองรับแนวคิดของการรวบรวมขยะอัตโนมัติ ทันทีที่จำนวนอ้างอิงของวัตถุถึงศูนย์ หน่วยความจำจะถูกล้างและว่างสำหรับการใช้งาน

>>> import sys
>>> var = {}
>>> print(sys.getrefcount(ar))
>>> 2
>>> v=var
>>> print(sys.getrefcount(v))
>>> 3

ในกรณีนี้ หากจำนวนอ้างอิงเริ่มลดลงและเพิ่มขึ้นพร้อมกัน ตัวรวบรวมอัตโนมัติจะไม่สามารถทำงานได้อย่างถูกต้อง ดังนั้นจึงมีโอกาสเกิดการรั่วไหลของหน่วยความจำเพิ่มขึ้น

เพื่อลดความเสี่ยงนี้ GIL ถูกนำมาใช้ใน python การเพิ่ม Global Lock ถือว่าดีกว่าการเพิ่ม Lock ให้กับตัวแปรแต่ละตัวซึ่งจะส่งผลให้มีชุดของ Lock ที่นำไปสู่การ Deadlock

Python Global Interpreter Lock (GIL) คืออะไร

เหตุใด GIL จึงยังคงอยู่ใน Python

GIL จำเป็นต้องได้รับการปรับปรุงเพื่อให้เราสามารถจัดการได้ดียิ่งขึ้น ดังนั้น แทนที่จะลบ GIL เรากำลังดำเนินการปรับปรุงแนวคิดของ GIL เนื่องจาก python เชื่อมโยงกับฐานของ c และ cpython อย่างหมดจด เราจึงไม่สามารถลบ Gil ออกได้โดยตรง แม้ว่าจะมีวิธีการต่างๆ ในการจัดการปัญหาที่ GIL ซึ่งแก้ไขได้นั้นยากต่อการนำไปใช้ และลดเวลาการประมวลผลและรันไทม์ของระบบ

เช่น

สมมุติว่ากระบวนการ P1 กำลังมีเธรด t1 และ t2 เธรด Python ถูกสร้างโดยธรรมชาติ กำหนดตารางเวลาโดยระบบปฏิบัติการพื้นฐาน

t1 วิ่ง (รันสเตจ) (รับ GIL) → t1 กำลังรอ I/O (เข้า/ออก) (ปล่อย GIL) → t2 ทำงาน (รันสเตจ) (ได้มาซึ่ง GIL ในเวลานี้ t1 ก็พร้อมที่จะรันเช่นกัน แต่ได้รับ GIL แล้ว โดย t2)

ดังนั้น ที่นี่ GIL จึงเป็นข้อจำกัดที่สำคัญ ดังนั้น หากเราต้องการเขียนแอปพลิเคชัน/โมดูลหลามแบบมัลติเธรดที่มีการดำเนินการกับ CPU อย่างหนัก จะไม่สามารถได้ผลลัพธ์ที่ต้องการได้

เพราะใน Python จริงมัลติเธรดนั้นเป็นไปไม่ได้ เนื่องจากกระบวนการจะใช้ CPU เพียงตัวเดียวอย่างมีประสิทธิภาพในคราวเดียว ถึงแม้ว่า CPU แบบมัลติคอร์จะพร้อมใช้งาน

อย่างไรก็ตาม ในแอปพลิเคชัน Python ส่วนใหญ่ (เว็บแอปพลิเคชัน เซิร์ฟเวอร์ที่ใช้ Django เป็นต้น) จะไม่เป็นปัญหาเนื่องจากแอปพลิเคชันเหล่านี้เป็น I/O ที่ถูกจำกัดโดยธรรมชาติ

ในฐานะโปรแกรมเมอร์ Python เราไม่ต้องจัดการกับการจัดหาและเผยแพร่ GIL จนกว่าเราจะเขียนโมดูล/สคริปต์ C/C++ ที่สั่งการได้ใน python

บทสรุป

ในบทความนี้ เราได้เรียนรู้เกี่ยวกับการล็อกล่าม Python Global ความสำคัญ &เหตุใดจึงไม่สามารถลบออกจาก python ได้โดยตรง