( गो 1.8 - Q1 2017 के लिए, नीचे देखें )
अगले गो 1.5 समवर्ती गारबेज कलेक्टर को शामिल करने में सक्षम "गति" जीसी कहा। इस पत्र में
एक प्रस्ताव प्रस्तुत किया गया है जो इसे गो 1.5 के लिए बना सकता है, लेकिन गो में मौजूद जीसी को समझने में भी मदद करता है।
आप राज्य को 1.5 से पहले देख सकते हैं (दुनिया रोकें: STW)
गो 1.5 से पहले, गो ने एक समानांतर स्टॉप-द-वर्ल्ड (STW) कलेक्टर का उपयोग किया है।
जबकि एसटीडब्ल्यू संग्रह में कई डाउनसाइड हैं, यह कम से कम अनुमानित और नियंत्रणीय ढेर विकास व्यवहार करता है।
( गोफरकॉन 2015 प्रस्तुति " गो जीसी: गोइंग लेटेंसी प्रॉब्लम इन गो 1.5 " से फोटो )
एसटीडब्ल्यू कलेक्टर के लिए एकमात्र ट्यूनिंग घुंडी "जीओजीसी" थी, जो संग्रह के बीच सापेक्ष वृद्धि है। डिफ़ॉल्ट सेटिंग, 100%, ट्रिगर कचरा संग्रह हर बार हीप आकार पिछले संग्रह के रूप में लाइव हीप आकार से दोगुना हो गया है:
एसटीडब्ल्यू कलेक्टर में जीसी समय।
गो 1.5 एक समवर्ती कलेक्टर का परिचय देता है ।
एसटीडब्ल्यू संग्रह पर इसके कई फायदे हैं, लेकिन यह विकास को नियंत्रित करने के लिए कठिन विकास करता है क्योंकि कचरा कलेक्टर चल रहा है, जबकि आवेदन मेमोरी को आवंटित कर सकता है ।
( गोफरकॉन 2015 प्रस्तुति " गो जीसी: गोइंग लेटेंसी प्रॉब्लम इन गो 1.5 " से फोटो )
उसी ढेर की वृद्धि की सीमा को प्राप्त करने के लिए रनटाइम को पहले कचरा संग्रह शुरू करना होगा, लेकिन पहले से कई चर पर निर्भर करता है, जिनमें से कई की भविष्यवाणी नहीं की जा सकती है।
- कलेक्टर को भी जल्दी शुरू करें, और एप्लिकेशन बहुत सारे कचरा संग्रह का प्रदर्शन करेगा, सीपीयू संसाधनों को बर्बाद कर देगा।
- कलेक्टर को बहुत देर से शुरू करें, और आवेदन वांछित अधिकतम वृद्धि को पार कर जाएगा।
संगामिति का त्याग किए बिना सही संतुलन प्राप्त करने के लिए कचरा कलेक्टर को ध्यान से रखने की आवश्यकता होती है।
जीसी पेसिंग का लक्ष्य दो आयामों के साथ अनुकूलन करना है: ढेर वृद्धि, और कचरा कलेक्टर द्वारा उपयोग किया गया सीपीयू।
जीसी पेसिंग के डिजाइन में चार घटक होते हैं:
- जीसी चक्र की स्कैनिंग कार्य की मात्रा के लिए एक अनुमानक की आवश्यकता होगी,
- म्यूटेटर के लिए एक मैकेनिज्म, जो ढेर के आवंटन तक पहुंचता है, स्कैन की गई कार्य की अनुमानित राशि को ढेर लक्ष्य तक पहुंचाता है,
- जब म्यूटेंट सीपीयू बजट को कम करता है, और जब पृष्ठभूमि की स्कैनिंग के लिए एक अनुसूचक
- जीसी ट्रिगर के लिए एक आनुपातिक नियंत्रक।
डिजाइन समय के दो अलग-अलग विचारों को संतुलित करता है: सीपीयू समय और ढेर समय ।
- सीपीयू समय मानक दीवार घड़ी समय की तरह है, लेकिन
GOMAXPROCS
समय तेजी से गुजरता है।
यही है, अगर GOMAXPROCS
8 है, तो आठ सीपीयू सेकंड हर दीवार को दूसरे और जीसी को दो सेकंड का सीपीयू समय हर दीवार दूसरी बार मिलता है।
CPU अनुसूचक CPU समय का प्रबंधन करता है।
- हीप समय का मार्ग बाइट्स में मापा जाता है और म्यूटेटर आवंटित होने पर आगे बढ़ता है।
ढेर समय और दीवार समय के बीच संबंध आवंटन दर पर निर्भर करता है और लगातार बदल सकता है।
म्यूटेटर हीप समय के पारित होने का प्रबंधन करता है, यह सुनिश्चित करता है कि अनुमानित स्कैन का काम उस समय तक पूरा हो चुका है जब तक कि गोल आकार में नहीं पहुंच जाता।
अंत में, ट्रिगर नियंत्रक एक प्रतिक्रिया लूप बनाता है जो समय के इन दो विचारों को एक साथ जोड़ता है, दोनों हीप समय और सीपीयू समय लक्ष्यों के लिए अनुकूलन करता है।