यहां, माइक्रोसॉफ्ट जीई के दो संस्करणों का वर्णन करने के लिए "समवर्ती" और "पृष्ठभूमि" नामों का उपयोग करता है जो इसे .NET में उपयोग करता है। .NET दुनिया में, "पृष्ठभूमि कलेक्टर" "समवर्ती संग्राहक" पर एक वृद्धि है जिसमें कलेक्टर चल रहा है, इसके दौरान एप्लिकेशन थ्रेड क्या कर सकते हैं पर कम प्रतिबंध हैं।
एक मूल जीसी एक "स्टॉप-द-वर्ल्ड" रणनीति का उपयोग करता है: आवेदक धागे एक सामान्य ढेर से मेमोरी ब्लॉक आवंटित करते हैं। जब जीसी को चलाना चाहिए (उदा। बहुत सारे ब्लॉक आवंटित किए गए हैं, कुछ सफाई की आवश्यकता है), सभी आवेदक (प्रबंधित) धागे रुकते हैं। आखिरी रोकथाम धागा जीसी चलाता है, और जब यह खत्म हो जाता है तो सभी अन्य धागे को अनब्लॉक करता है। एक स्टॉप-द-वर्ल्ड जीसी लागू करने के लिए आसान है लेकिन ऐसे विरामों को प्रेरित करता है जो उपयोगकर्ता स्तर पर अवधारणात्मक हो सकते हैं।
माइक्रोसॉफ्ट का "समवर्ती जीसी" पीढ़ी है: यह ढेर के केवल सीमित हिस्से के लिए स्टॉप-द-वर्ल्ड रणनीति का उपयोग करता है (जिसे वे "पीढ़ी 0 और 1" कहते हैं)। चूंकि वह हिस्सा छोटा रहता है, इसलिए विराम कम रहता है (उदा। 50ms से नीचे), ताकि उपयोगकर्ता उन्हें नोटिस न करे। बाकी ढेर को एक समर्पित जीसी थ्रेड के साथ एकत्र किया जाता है, जो आवेदक धागे (इसलिए नाम) के साथ समवर्ती चला सकता है।
समवर्ती जीसी में कुछ सीमाएं हैं। अर्थात्, ऐसे क्षण हैं जब जीसी थ्रेड को ढेर के कुछ विशेष नियंत्रण को मानना चाहिए। ऐसे समय के दौरान, आवेदक धागे केवल छोटे धागे-विशिष्ट क्षेत्रों से ब्लॉक आवंटित कर सकते हैं। थ्रेड जो बड़ी जरूरतें हैं, जल्द ही मुख्य ढेर पर ठोकर खाएंगे, जो उस समय, जीसी थ्रेड द्वारा बंद कर दिया गया है। आवंटित थ्रेड तब तक अवरुद्ध होना चाहिए जब तक कि जीसी थ्रेड ने लॉक-द-हेप चरण समाप्त नहीं किया हो। यह फिर से विराम उत्पन्न करता है। एक स्टॉप-द-वर्ल्ड जीसी के मुकाबले कम विराम, और ये विराम सभी धागे को प्रभावित नहीं करते हैं। फिर भी रोकता है।
"पृष्ठभूमि जीसी" एक उन्नत जीसी है जिसमें जीसी थ्रेड को ढेर को लॉक करने की आवश्यकता नहीं है। यह पिछले पैराग्राफ में वर्णित अतिरिक्त विराम को हटा देता है; युवा पीढ़ियों को एकत्रित करते समय केवल सीमित विराम बने रहें (माइक्रोसॉफ्ट क्या कहता है "एक अग्रभूमि संग्रह")।
नोट: समवर्ती जीसी और पृष्ठभूमि जीसी के साथ "छिपी लागत" हैं। इन जीसी के लिए सही तरीके से काम करने के लिए, आवेदक धागे से मेमोरी एक्सेस कुछ बहुत ही विशिष्ट तरीकों से किया जाना चाहिए, जिन पर प्रदर्शन पर थोड़ा असर पड़ता है। इसके अलावा, जीसी थ्रेड कैश मेमोरी पर प्रतिकूल प्रभाव डाल सकता है, इस प्रकार अप्रत्यक्ष रूप से खराब प्रदर्शन। उपयोगकर्ता इंटरैक्शन की आवश्यकता के बिना पूरी तरह से कम्प्यूटेशनल कार्य के लिए, औसत पर, कुछ हद तक बेहतर प्रदर्शन प्रदान करता है (उदाहरण के लिए बीस घंटे लंबी गणना उन्नीस घंटों में पूरी हो जाएगी)। लेकिन यह एक बढ़त मामला है, और ज्यादातर स्थितियों में समवर्ती और पृष्ठभूमि जीसी बेहतर हैं।
अच्छी व्याख्या .. हालांकि यदि आप मुख्यधारा की शब्दावली से चिपके रहते हैं तो यह अधिक उपयुक्त होगा। प्रबंधित धागे/कोड आदि आवेदक? वह क्या है? –
आवेदक धागे धागे हैं जो प्रोग्रामर लिखते हैं (छुपे हुए प्रबंधन धागे के विपरीत, यदि कोई हैं तो) चलाते हैं। "प्रबंधित" धागे थ्रेड हैं जो प्रबंधित कोड चलाते हैं (यानी कोड नहीं जो सी या सी ++ में लिखा गया है)। यह _is_ मुख्यधारा की शब्दावली। –