gh-116167: GIL को अक्षम करने की अनुमति दें
परिवर्तन का दायरा / वर्तमान स्थिति
- यह परिवर्तन GIL को वैकल्पिक बनाने के कार्य से आता है (PEP 703)।
- वर्तमान PR के लिए CPython को एक विशेष फ़्लैग के साथ कंपाइल करना होता है, फिर एक रनटाइम टॉगल के माध्यम से GIL को अक्षम किया जाता है।
- यह स्पष्ट रूप से एक प्रारंभिक, शोध-चरण का कदम है: इसका लक्ष्य केवल thread-free प्रोग्रामों के लिए विश्वसनीय रूप से काम करना है।
- GIL अक्षम होने पर asyncio परीक्षण विफल होते हैं; कुछ सरल threaded प्रोग्राम “काम करते हुए” दिखते हैं, लेकिन सुरक्षित होने की गारंटी नहीं है।
सिंगल-थ्रेड बनाम मल्टी-थ्रेड प्रदर्शन
- GIL हटाने से multi-threaded Python में वास्तविक multi-core parallelism संभव होता है, जो high-thread workloads (जैसे ML, research) के लिए उपयोगी है।
- single-threaded code के लिए, कई टिप्पणीकार अतिरिक्त locking के कारण प्रदर्शन में कमी बताते हैं; PEP 703 में 5–15% slowdown का उल्लेख है।
- कुछ लोगों को उम्मीद है कि समय के साथ और optimizations single-threaded nogil builds के overhead को कम कर सकती हैं।
Asyncio, Threads, और Compatibility
- कई टिप्पणियाँ स्पष्ट करती हैं: async I/O और OS threads अलग-अलग हैं; वर्तमान टूट-फूट ज्यादातर asyncio tests में है जो threads और coroutines को मिलाते हैं।
- thread में यह लेकर भ्रम है कि क्या “कोई भी threaded code” टूटता है; सहमति यह है कि कई मौजूदा threaded patterns, खासकर shared objects वाले, इस release में unsafe हैं।
आज Threads के विकल्प
- CPU-bound tasks के लिए
multiprocessingको व्यापक रूप से एक workaround माना जाता है, लेकिन:- Windows और macOS पर
forkकी कमी /spawnके उपयोग के कारण यह धीमा और awkward हो जाता है। - बड़े memory footprints और जटिल shared data structures process-based parallelism को painful बना देते हैं।
- Windows और macOS पर
- Ray जैसी libraries multi-process और shared memory में मदद करती हैं, लेकिन उनकी अपनी सीमाएँ हैं (जैसे immutable array-focused objects)।
Ecosystem & C Extensions पर प्रभाव
- अधिकांश native (C/C++) extensions thread safety के लिए अप्रत्यक्ष रूप से GIL पर निर्भर करते हैं (globals, unsynchronized list mutations, आदि)।
- योजना यह है: यदि कोई extension GIL पर निर्भर है, तो वह इसे enabled रखेगा; लंबे समय में, extensions को nogil-safe या स्पष्ट रूप से GIL-using होने के लिए अपडेट करना होगा।
Python बनाम अन्य भाषाएँ & Typing
- कई टिप्पणीकार तर्क देते हैं कि यदि आपको आज “Python + types + concurrency” चाहिए, तो Go, Rust, C#, Kotlin, Julia, Nim, या BEAM languages बेहतर विकल्प हो सकते हैं।
- अन्य लोग जवाब देते हैं कि Python का ecosystem (NumPy, PyTorch, ML/DS tooling) हावी है, और nogil plus आधुनिक type checkers (जैसे mypy, pyright) Python को कई उपयोग मामलों में प्रतिस्पर्धी बनाते हैं।
- Python की speed और typing model बनाम “modern” languages पर बहस जारी है, और यह स्वीकार किया जाता है कि Python धीमा ही रहेगा, लेकिन फिर भी काफी सुधार कर सकता है।