पायथन निर्माता, गुइडो वान रॉसुम के इस पोस्ट में पायथन से जीआईएल को हटाने के एक शुरुआती प्रयास का उल्लेख है:
निराशाजनक परिणामों के साथ यह पहले भी आजमाया जा चुका है, यही वजह है कि मैं खुद इसमें ज्यादा प्रयास करने से हिचक रहा हूं। 1999 में ग्रेग स्टीन (मार्क हैमंड के साथ?) ने पायथन (1.5 मेरा मानना है) का एक कांटा तैयार किया, जिसने जीआईएल को हटा दिया, इसे सभी उत्परिवर्तित डेटा संरचनाओं पर बारीक-बारीक ताले के साथ बदल दिया। उन्होंने उन पैच को भी प्रस्तुत किया, जिन्होंने वैश्विक परिवर्तनशील डेटा संरचनाओं पर बहुत सारी निर्भरताएँ दूर कीं, जिन्हें मैंने स्वीकार कर लिया। हालाँकि, बेंचमार्किंग के बाद, यह दिखाया गया था कि प्लेटफ़ॉर्म पर भी सबसे तेज़ लॉकिंग प्रिमिटिव (उस समय विंडोज) के साथ, यह सिंगल-थ्रेडेड निष्पादन को लगभग दो गुना धीमा कर देता है, जिसका अर्थ है कि दो सीपीयू पर, आपको बस थोड़ा और काम मिल सकता है GIL की तुलना में GIL के बिना GIL के साथ किया जाता है। यह पर्याप्त नहीं था, और ग्रेग का पैच गुमनामी में गायब हो गया। (प्रदर्शन पर ग्रेग का राइटअप देखें।)
मैं शायद ही वास्तविक परिणामों के साथ बहस कर सकता हूं, लेकिन मुझे वास्तव में आश्चर्य है कि ऐसा क्यों हुआ। संभवतः, मुख्य कारण यह है कि सीपीआईएलथॉन से जीआईएल को हटाना इतना मुश्किल है क्योंकि संदर्भ गिनती स्मृति प्रबंधन प्रणाली है। एक विशिष्ट पायथन कार्यक्रम कॉल करेगा Py_INCREFऔर Py_DECREFहजारों या लाखों बार, यह एक महत्वपूर्ण विवाद बिंदु बना देगा यदि हम इसके चारों ओर ताले लपेटने के लिए थे।
लेकिन, मुझे समझ में नहीं आता है कि परमाणु आदिम जोड़ना एक एकल थ्रेडेड प्रोग्राम को धीमा क्यों करेगा । मान लीजिए कि हमने सिर्फ सीपीथॉन को संशोधित किया है ताकि प्रत्येक पायथन ऑब्जेक्ट में रेफकाउंट चर एक परमाणु आदिम हो। और फिर हम केवल एक परमाणु वृद्धि (लाने और जोड़ने के निर्देश) करते हैं जब हमें संदर्भ गणना को बढ़ाने की आवश्यकता होती है। इससे पायथन संदर्भ गिनती धागा-सुरक्षित हो जाएगा, और एकल-थ्रेडेड एप्लिकेशन पर कोई प्रदर्शन जुर्माना नहीं होना चाहिए, क्योंकि कोई लॉक विवाद नहीं होगा।
लेकिन अफसोस, बहुत से लोग जो मुझसे ज्यादा होशियार हैं, वे कोशिश कर चुके हैं और असफल रहे हैं, तो जाहिर है कि मुझे यहां कुछ याद आ रहा है। जिस तरह से मैं इस समस्या को देख रहा हूं उसमें क्या गलत है?