Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> iOS

ग्रैंड सेंट्रल डिस्पैच (GCD)


ग्रैंड सेंट्रल डिस्पैच (GCD) - Apple के Mac OS X और iOS ऑपरेटिंग सिस्टम के लिए एक तकनीक - C भाषा के एक्सटेंशन, एक API, और एक रन-टाइम लाइब्रेरी का संयोजन है जो एप्लिकेशन डेवलपर्स को कोड के उन खंडों की पहचान करने की अनुमति देता है जो समानांतर में चल सकते हैं। OpenMP की तरह, GCD थ्रेडिंग के अधिकांश विवरणों को प्रबंधित करता है।

GCD, C और C++ भाषाओं के एक्सटेंशन की पहचान करता जिन्हें ब्लॉक्स के नाम से जाना जाता है। एक ब्लॉक केवल कार्य की एक स्व-निहित इकाई है। इसे एक कैरेट ^ द्वारा निर्दिष्ट किया जाता है जिसे ब्रेसेस { } की जोड़ी के सामने डाला जाता है। एक ब्लॉक का सरल उदाहरण नीचे दिखाया गया है:

{
    ^printf("This is a block");
}

यह डिस्पैच कतार पर रखकर ब्लॉक्स को रन-टाइम एक्जीक्यूशन के लिए शेड्यूल करता है। जब यह एक ब्लॉक को कतार से हटाता है, तो यह ब्लॉक को उस थ्रेड पूल से एक उपलब्ध थ्रेड पर असाइन करता है जिसे यह प्रबंधित करता है। GCD दो प्रकार की डिस्पैच कतारों की पहचान करता है: सीरियल और समवर्ती।

सीरियल कतार पर रखे गए ब्लॉक्स FIFO क्रम में हटाए जाते हैं। एक बार जब एक ब्लॉक कतार से हटा दिया जाता है, तो दूसरा ब्लॉक हटाए जाने से पहले उसका निष्पादन पूरा होना चाहिए। प्रत्येक प्रक्रिया की अपनी सीरियल कतार होती है (जिसे मुख्य कतार के रूप में जाना जाता है)। डेवलपर्स विशेष प्रक्रियाओं के लिए स्थानीय अतिरिक्त सीरियल कतारें बना सकते हैं। सीरियल कतारें कई कार्यों के अनुक्रमिक निष्पादन को सुनिश्चित करने के लिए उपयोगी हैं।

समवर्ती कतार पर रखे गए ब्लॉक्स भी FIFO क्रम में हटाए जाते हैं, लेकिन एक समय में कई ब्लॉक्स हटाए जा सकते हैं, इस प्रकार कई ब्लॉक्स को समानांतर में निष्पादित करने की अनुमति मिलती है। तीन सिस्टम-वाइड समवर्ती डिस्पैच कतारें हैं, और उन्हें प्राथमिकता के अनुसार प्रतिष्ठित किया जाता है: निम्न, डिफ़ॉल्ट, और उच्च। प्राथमिकताएं ब्लॉक्स के सापेक्ष महत्व का एक सन्निकटन दर्शाती हैं। सरल शब्दों में, उच्च प्राथमिकता वाले ब्लॉक्स को उच्च प्राथमिकता वाली डिस्पैच कतार पर रखा जाना चाहिए।

निम्न कोड सेगमेंट डिफ़ॉल्ट-प्राथमिकता समवर्ती कतार प्राप्त करने और dispatch_async() फंक्शन का उपयोग करके कतार में एक ब्लॉक सबमिट करने को दर्शाता है:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{ printf("This is a block."); });

आंतरिक रूप से, GCD का थ्रेड पूल POSIX थ्रेड्स से बना होता है। GCD पूल को सक्रिय रूप से प्रबंधित करता है, जिससे थ्रेड्स की संख्या एप्लिकेशन की मांग और सिस्टम क्षमता के अनुसार बढ़ और घट सकती है।


  1. जावास्क्रिप्ट में ब्लॉक स्कोपिंग जावास्क्रिप्ट में ब्लॉक स्कोपिंग

    परिचय ब्लॉक स्कोप दो कर्ली ब्रेसेस { } के बीच का क्षेत्र होता है - जो लूप्स, if कंडीशन्स, स्विच स्टेटमेंट्स, या स्टैंडअलोन ब्लॉक्स में हो सकता है। ES2015 में पेश किए गए let और const हमें ब्लॉक-स्कोप्ड वेरिएबल्स बनाने की अनुमति देते हैं जिन्हें केवल उन ब्लॉक्स के अंदर एक्सेस किया जा सकता है। उदाहरण

  1. जावास्क्रिप्ट में क्यू का कार्यान्वयन जावास्क्रिप्ट में क्यू का कार्यान्वयन

    जावास्क्रिप्ट में क्यू को लागू करने का कोड निम्नलिखित है। उदाहरण <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Document</title> <style>    body { &nb

  1. iOS कंकरेंसी में मास्टरी: GCD क्यू और एक्ज़ीक्यूशन मोड को समझना iOS कंकरेंसी में मास्टरी: GCD क्यू और एक्ज़ीक्यूशन मोड को समझना

    iOS में कंकरेंसी एक विशाल विषय है। इसलिए इस लेख में मैं क्यू और ग्रैंड सेंट्रल डिस्पैच (GCD) फ्रेमवर्क से संबंधित एक उप-विषय पर ज़ूम इन करना चाहता हूं। विशेष रूप से, मैं सीरियल और कंकरेंट क्यू के बीच के अंतरों का पता लगाना चाहता हूं, साथ ही सिंक्रोनस और एसिंक्रोनस एक्ज़ीक्यूशन के बीच के अंतरों का।