ग्रैंड सेंट्रल डिस्पैच: Difference between revisions

From Vigyanwiki
No edit summary
 
(19 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Technology developed by Apple Inc}}
{{Short description|Technology developed by Apple Inc}}{{infobox software
 
{{primary sources|date=जून 2010}}
{{infobox software
| name =  
| name =  
| logo = [[Image:Gcd icon20090608.jpg|GCD|96px]]
| logo = [[Image:जीसीडी icon20090608.jpg|GCD|96px]]
| author = Dave Zarzycki
| author = डेव जर्ज़की
| developer = [[Apple Inc.]]
| developer = [[एप्पल इंक.]]
| operating_system = [[Mac OS X]] 10.6 (2009) and later, [[iOS (Apple)|iOS]] 4.0 and later,<ref>{{cite web|title=Grand Central Dispatch (GCD) Reference|publisher=Apple Inc.|url=https://developer.apple.com/library/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/}}</ref> watchOS, tvOS, [[FreeBSD]]
| operating_system = [[मैक ओएस एक्स]] 10.6 (2009) और बाद में, [[आईओएस (ऐप्पल)|आईओएस]] 4.0 और बाद में,<ref>{{cite web|title=Grand Central Dispatch (GCD) Reference|publisher=Apple Inc.|url=https://developer.apple.com/library/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/}}</ref> वॉचओएस, टीवीओएस, [[फ्रीबीएसडी]]
| genre = [[Software utility|System Utility]]
| genre = [[सॉफ्टवेयर यूटिलिटी | सिस्टम यूटिलिटी]]
| license = [[Apache License 2.0|Apache 2.0]]
| license = [[अपाचे लाइसेंस 2.0 | अपाचे 2.0]]
| website = https://apple.github.io/swift-corelibs-libdispatch/
| website = https://apple.github.io/swift-corelibs-libdispatch/
}}
}}


ग्रैंड सेंट्रल डिस्पैच (जीसीडी या लिबडिस्पैच), [[ मल्टी-कोर (कम्प्यूटिंग) ]] | मल्टी-कोर प्रोसेसर और [[ सममित बहु प्रसंस्करण |अन्य सममितीय मल्टीप्रोसेसिंग सिस्टम वाले सिस्टम के लिए एप्लिकेशन सपोर्ट को अनुकूलित करने के लिए एप्पल इनकॉरपोरेटेड द्वारा विकसित एक विधि है।]]।<ref>[https://www.apple.com/pr/library/2008/06/09snowleopard.html Apple Previews Mac OS X Snow Leopard to Developers] {{Webarchive|url=https://web.archive.org/web/20120318064324/http://www.apple.com/pr/library/2008/06/09Apple-Previews-Mac-OS-X-Snow-Leopard-to-Developers.html |date=March 18, 2012 }}, June 9, 2008.</ref> यह [[थ्रेड पूल पैटर्न]] के आधार पर [[कार्य समानता]] का क्रियान्वयन है। मौलिक विचार थ्रेड पूल के प्रबंधन को डेवलपर के हाथों से बाहर और ऑपरेटिंग सिस्टम के निकट ले जाना है। डेवलपर पूल के वास्तु-कला से निश्चिंत हो कर काम के पैकेज को पूल में इंजेक्ट करता है। यह मॉडल सरलता, सुवाह्यता और प्रदर्शन में सुधार करता है।
ग्रैंड सेंट्रल डिस्पैच (जीसीडी या लिबडिस्पैच), [[ मल्टी-कोर (कम्प्यूटिंग) |मल्टी-कोर (कम्प्यूटिंग)]] | मल्टी-कोर प्रोसेसर और [[ सममित बहु प्रसंस्करण |अन्य सममितीय मल्टीप्रोसेसिंग सिस्टम वाले सिस्टम के लिए एप्लिकेशन सपोर्ट को अनुकूलित करने के लिए एप्पल इनकॉरपोरेटेड द्वारा विकसित एक विधि है।]]।<ref>[https://www.apple.com/pr/library/2008/06/09snowleopard.html Apple Previews Mac OS X Snow Leopard to Developers] {{Webarchive|url=https://web.archive.org/web/20120318064324/http://www.apple.com/pr/library/2008/06/09Apple-Previews-Mac-OS-X-Snow-Leopard-to-Developers.html |date=March 18, 2012 }}, June 9, 2008.</ref> यह [[थ्रेड पूल पैटर्न]] के आधार पर [[कार्य समानता]] का क्रियान्वयन है। मौलिक विचार थ्रेड पूल के प्रबंधन को डेवलपर के हाथों से बाहर और ऑपरेटिंग सिस्टम के निकट ले जाना है। डेवलपर पूल के वास्तु-कला से निश्चिंत हो कर कार्य के पैकेज को पूल में इंजेक्ट करता है। यह मॉडल सरलता, सुवाह्यता और प्रदर्शन में सुधार करता है।


जीसीडी को सबसे पहले Mac OS X 10.6 के साथ रिलीज़ किया गया था, और यह [[iOS (Apple)|iOS (एप्पल)]] 4 और इसके बाद के संस्करण के साथ भी उपलब्ध है। ग्रैंड सेंट्रल डिस्पैच नाम [[ भव्य केन्द्रीय टर्मिनल ]] का एक संदर्भ है।{{Citation needed|date=June 2010}}
जीसीडी को सबसे पहले मैकओएस X 10.6 के साथ रिलीज़ किया गया था, और यह आईओएस [[iOS (Apple)|(एप्पल)]] 4 और इसके पश्चात के संस्करण के साथ भी उपलब्ध है। ग्रैंड सेंट्रल डिस्पैच शीर्षक[[ भव्य केन्द्रीय टर्मिनल ]]का एक संदर्भ है।


पुस्तकालय के लिए स्रोत कोड जो जीसीडी की सेवाओं का कार्यान्वयन प्रदान करता है, libdispatch, एप्पल द्वारा 10 सितंबर, 2009 को Apache लाइसेंस के तहत जारी किया गया था।<ref>{{Cite web|url=https://apple.github.io/swift-corelibs-libdispatch/|title=ग्रैंड सेंट्रल डिस्पैच|website=apple.github.io}}</ref> इसे पोर्ट किया गया है<ref>{{Cite web |url=http://lists.macosforge.org/pipermail/libdispatch-dev/2009-September/000059.html |title=GCD libdispatch w/Blocks support working on FreeBSD |access-date=September 28, 2009 |archive-date=July 27, 2011 |archive-url=https://web.archive.org/web/20110727053237/http://lists.macosforge.org/pipermail/libdispatch-dev/2009-September/000059.html |url-status=dead }}</ref> फ्रीबीएसडी 8.1+ के लिए,<ref>{{Cite web|url=https://www.freebsd.org/status/report-2009-04-2009-09.html|title=FreeBSD तिमाही स्थिति रिपोर्ट|website=www.freebsd.org}}</ref> [[मिडनाइटबीएसडी]] 0.3+,<ref>{{Cite web|url=https://www.justjournal.com/users/mbsd/entry/18349|title=libdispatch|website=Just Journal}}</ref> लिनक्स, और सोलारिस।<ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-April/000485.html libdispatch mailing list: "Porting status Linux"] April 10, 2011</ref><ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-April/000486.html libdispatch mailing list: "Porting status Solaris x86/64"] April 10, 2011</ref> 2011 में विंडोज़ पर libdispatch काम करने के प्रयासों को अपस्ट्रीम में विलय नहीं किया गया था।<ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-April/000510.html libdispatch mailing list: "libdispatch for Win32"] April 22, 2011</ref><ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-May/000515.html libdispatch mailing list: "Updates regarding the status of libdispatch on Windows"] May 5, 2011</ref> सफारी और आईट्यून्स के साथ भेजे गए विंडोज के लिए एप्पल के पास libdispatch.dll का अपना पोर्ट है, लेकिन कोई [[ सॉफ़्टवेयर विकास किट ]] प्रदान नहीं किया गया है।
लाइब्रेरी के लिए स्रोत कोड जो जीसीडी की सेवाओं का कार्यान्वयन प्रदान करता है, लिबडिस्पैच, एप्पल द्वारा 10 सितंबर, 2009 को अपाचे लाइसेंस के अनुसार जारी किया गया था।<ref>{{Cite web|url=https://apple.github.io/swift-corelibs-libdispatch/|title=ग्रैंड सेंट्रल डिस्पैच|website=apple.github.io}}</ref> इसे पोर्ट किया गया है<ref>{{Cite web |url=http://lists.macosforge.org/pipermail/libdispatch-dev/2009-September/000059.html |title=GCD libdispatch w/Blocks support working on FreeBSD |access-date=September 28, 2009 |archive-date=July 27, 2011 |archive-url=https://web.archive.org/web/20110727053237/http://lists.macosforge.org/pipermail/libdispatch-dev/2009-September/000059.html |url-status=dead }}</ref> फ्रीबीएसडी 8.1+ के लिए,<ref>{{Cite web|url=https://www.freebsd.org/status/report-2009-04-2009-09.html|title=FreeBSD तिमाही स्थिति रिपोर्ट|website=www.freebsd.org}}</ref> [[मिडनाइटबीएसडी]] 0.3+,<ref>{{Cite web|url=https://www.justjournal.com/users/mbsd/entry/18349|title=libdispatch|website=Just Journal}}</ref> लिनक्स, और सोलारिस।<ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-April/000485.html libdispatch mailing list: "Porting status Linux"] April 10, 2011</ref><ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-April/000486.html libdispatch mailing list: "Porting status Solaris x86/64"] April 10, 2011</ref> 2011 में विंडोज़ पर लिबडिस्पैच कार्य करने के प्रयासों को प्रतिकूल में विलय नहीं किया गया था।<ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-April/000510.html libdispatch mailing list: "libdispatch for Win32"] April 22, 2011</ref><ref>[http://lists.macosforge.org/pipermail/libdispatch-dev/2011-May/000515.html libdispatch mailing list: "Updates regarding the status of libdispatch on Windows"] May 5, 2011</ref> सफारी और आईट्यून्स के साथ भेजे गए विंडोज के लिए एप्पल के पास लिबडिस्पैच.dll का अपना पोर्ट है, लेकिन कोई[[ सॉफ़्टवेयर विकास किट | सॉफ़्टवेयर विकास किट]] प्रदान नहीं किया गया है।


2017 के बाद से, निक हचिंसन द्वारा होस्ट किया गया मूल libdispatch रिपॉजिटरी<ref>{{cite web |last1=Hutchinson |first1=Nicholas |title=libdispatch|url=https://github.com/nickhutchinson/libdispatch|website=GitHub |access-date=15 January 2020 |date=10 January 2020}}</ref> जून 2016 में बनाए गए [[ स्विफ्ट (प्रोग्रामिंग भाषा) ]] कोर लाइब्रेरी का हिस्सा है जो एक संस्करण के पक्ष में पदावनत किया गया था। नया संस्करण अधिक प्लेटफार्मों का समर्थन करता है, विशेष रूप से विंडोज सहित।
2017 के पश्चात से, निक हचिंसन द्वारा आतिथेय किया गया मूल लिबडिस्पैच रिपॉजिटरी<ref>{{cite web |last1=Hutchinson |first1=Nicholas |title=libdispatch|url=https://github.com/nickhutchinson/libdispatch|website=GitHub |access-date=15 January 2020 |date=10 January 2020}}</ref> जून 2016 में बनाए गए [[ स्विफ्ट (प्रोग्रामिंग भाषा) |स्विफ्ट (प्रोग्रामिंग भाषा)]] कोर लाइब्रेरी का भाग है जो एक संस्करण के पक्ष में हटा दिया गया था। नया संस्करण अधिक प्लेटफार्मों का समर्थन करता है, विशेष रूप से विंडोज सहित।


== डिजाइन ==
== डिजाइन ==


जीसीडी एक प्रोग्राम में विशिष्ट [[कार्य (कंप्यूटिंग)]] की अनुमति देकर काम करता है जिसे निष्पादन के लिए कतारबद्ध करने के लिए समानांतर में चलाया जा सकता है और प्रसंस्करण संसाधनों की उपलब्धता के आधार पर, उन्हें किसी भी उपलब्ध प्रोसेसर कोर पर निष्पादित करने के लिए [[शेड्यूलिंग (कंप्यूटिंग)]] किया जाता है।<ref name="gcdworks">{{cite web|url=https://images.apple.com/macosx/technology/docs/GrandCentral_TB_brief_20090903.pdf |title=ग्रैंड सेंट्रल डिस्पैच पर एप्पल टेक्निकल ब्रीफ|access-date=2009-09-12 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20090920043909/http://images.apple.com/macosx/technology/docs/GrandCentral_TB_brief_20090903.pdf |archive-date=September 20, 2009 |df=mdy-all }}</ref><ref name=OSConcepts>{{cite book|last=Gagne|first=Abraham Silberschatz, Peter Baer Galvin, Greg|title=ऑपरेटिंग सिस्टम की अवधारणाएँ|year=2013|publisher=Wiley|location=Hoboken, N.J.|isbn=9781118063330|pages=182–183|edition=9th}}</ref> (एप्पल द्वारा रूटिंग के रूप में संदर्भित)।<ref>{{cite web|url=http://www.roughlydrafted.com/2008/06/12/wwdc-2008-new-in-mac-os-x-snow-leopard/|title=WWDC 2008: New in Mac OS X Snow Leopard|access-date=June 18, 2008|archive-url=https://web.archive.org/web/20081017052319/http://www.roughlydrafted.com/2008/06/12/wwdc-2008-new-in-mac-os-x-snow-leopard/|archive-date=October 17, 2008|url-status=dead}}</ref>
जीसीडी एक प्रोग्राम में विशिष्ट [[कार्य (कंप्यूटिंग)]] की अनुमति देकर कार्य करता है जिसे निष्पादन के लिए क्रमबद्ध करने के लिए समानांतर में चलाया जा सकता है और प्रसंस्करण संसाधनों की उपलब्धता के आधार पर, उन्हें किसी भी उपलब्ध प्रोसेसर कोर पर निष्पादित करने के लिए [[शेड्यूलिंग (कंप्यूटिंग)]] किया जाता है।<ref name="gcdworks">{{cite web|url=https://images.apple.com/macosx/technology/docs/GrandCentral_TB_brief_20090903.pdf |title=ग्रैंड सेंट्रल डिस्पैच पर एप्पल टेक्निकल ब्रीफ|access-date=2009-09-12 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20090920043909/http://images.apple.com/macosx/technology/docs/GrandCentral_TB_brief_20090903.pdf |archive-date=September 20, 2009 |df=mdy-all }}</ref><ref name=OSConcepts>{{cite book|last=Gagne|first=Abraham Silberschatz, Peter Baer Galvin, Greg|title=ऑपरेटिंग सिस्टम की अवधारणाएँ|year=2013|publisher=Wiley|location=Hoboken, N.J.|isbn=9781118063330|pages=182–183|edition=9th}}</ref> (एप्पल द्वारा मार्ग के रूप में संदर्भित)।<ref>{{cite web|url=http://www.roughlydrafted.com/2008/06/12/wwdc-2008-new-in-mac-os-x-snow-leopard/|title=WWDC 2008: New in Mac OS X Snow Leopard|access-date=June 18, 2008|archive-url=https://web.archive.org/web/20081017052319/http://www.roughlydrafted.com/2008/06/12/wwdc-2008-new-in-mac-os-x-snow-leopard/|archive-date=October 17, 2008|url-status=dead}}</ref>
एक कार्य या तो एक उपनेमका के रूप में या एक ब्लॉक (सी भाषा विस्तार) के रूप में व्यक्त किया जा सकता है।<ref>{{cite web|title=ग्रैंड सेंट्रल डिस्पैच (जीसीडी) संदर्भ|url=https://developer.apple.com/library/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/|access-date=September 13, 2009}}</ref> ब्लॉक [[ सी (प्रोग्रामिंग भाषा) ]], [[सी ++]], और [[ उद्देश्य सी ]] प्रोग्रामिंग लैंग्वेज के सिंटैक्स का एक विस्तार है जो एक [[क्लोजर (कंप्यूटर साइंस)]] के समान एक ऑब्जेक्ट में कोड और डेटा को एनकैप्सुलेट करता है।<ref name="gcdworks"/>जीसीडी अभी भी उन वातावरणों में उपयोग किया जा सकता है जहां ब्लॉक उपलब्ध नहीं हैं।<ref>{{Cite web|url=https://wiki.freebsd.org/GCD#The_same_program.2C_without_C_Blocks|title = GrandCentralDispatch - FreeBSD Wiki}}</ref>
 
ग्रैंड सेंट्रल डिस्पैच अभी भी निम्न स्तर पर थ्रेड्स का उपयोग करता है लेकिन उन्हें प्रोग्रामर से दूर कर देता है, जिन्हें अधिक विवरणों से चिंतित होने की आवश्यकता नहीं होगी। जीसीडी में कार्य बनाने और क्यू करने में हल्के होते हैं; एप्पल का कहना है कि जीसीडी में एक कार्य इकाई को पंक्तिबद्ध करने के लिए 15 निर्देशों की आवश्यकता होती है, जबकि पारंपरिक थ्रेड बनाने के लिए आसानी से कई सौ निर्देशों की आवश्यकता हो सकती है।<ref name="gcdworks"/>
कार्य या तो एक कार्यक्रम के रूप में या ब्लॉक (सी भाषा विस्तार) के रूप में व्यक्त किया जा सकता है।<ref>{{cite web|title=ग्रैंड सेंट्रल डिस्पैच (जीसीडी) संदर्भ|url=https://developer.apple.com/library/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/|access-date=September 13, 2009}}</ref> ब्लॉक[[ सी (प्रोग्रामिंग भाषा) | सी (प्रोग्रामिंग भाषा)]] , [[सी ++]], और [[ उद्देश्य सी |ऑब्जेक्टिव सी]] प्रोग्रामिंग लैंग्वेज के वाक्य-विन्यास का एक विस्तार है जो एक [[क्लोजर (कंप्यूटर साइंस)]] के समान एक ऑब्जेक्ट में कोड और डेटा को एनकैप्सुलेट करता है।<ref name="gcdworks" /> जीसीडी अभी भी उन परिस्थिति में उपयोग किया जा सकता है जहां ब्लॉक उपलब्ध नहीं हैं।<ref>{{Cite web|url=https://wiki.freebsd.org/GCD#The_same_program.2C_without_C_Blocks|title = GrandCentralDispatch - FreeBSD Wiki}}</ref>
 
ग्रैंड सेंट्रल डिस्पैच अभी भी निम्न स्तर पर थ्रेड्स का उपयोग करता है लेकिन उन्हें प्रोग्रामर से दूर कर देता है, जिन्हें अधिक विवरणों से चिंतित होने की आवश्यकता नहीं होगी। जीसीडी में कार्य बनाने और क्रमबद्ध करने में सहज होते हैं; एप्पल का कहना है कि जीसीडी में कार्य इकाई को पंक्तिबद्ध करने के लिए 15 निर्देशों की आवश्यकता होती है, जबकि पारंपरिक थ्रेड बनाने के लिए सरलता से कई सौ निर्देशों की आवश्यकता हो सकती है।<ref name="gcdworks" />


ग्रैंड सेंट्रल डिस्पैच में एक कार्य का उपयोग या तो कतार में रखा गया कार्य आइटम बनाने के लिए किया जा सकता है या इसे किसी ईवेंट स्रोत को असाइन किया जा सकता है। यदि किसी ईवेंट स्रोत को कोई कार्य सौंपा गया है, तो ईवेंट ट्रिगर होने पर ब्लॉक या फ़ंक्शन से कार्य इकाई बनाई जाती है, और कार्य इकाई को उचित कतार में रखा जाता है। यह एप्पल द्वारा एक थ्रेड बनाने की तुलना में अधिक कुशल के रूप में वर्णित किया गया है जिसका एकमात्र उद्देश्य ट्रिगरिंग के एकल ईवेंट पर प्रतीक्षा करना है।
ग्रैंड सेंट्रल डिस्पैच में एक कार्य का उपयोग या तो पंक्ति में रखा गया कार्य विषय बनाने के लिए किया जा सकता है या इसे किसी घटना स्रोत को निर्दिष्ट किया जा सकता है। यदि किसी घटना स्रोत को कोई कार्य निर्दिष्ट गया है, तो घटना ट्रिगर होने पर ब्लॉक या कार्यक्रम से कार्य इकाई बनाई जाती है, और कार्य इकाई को उचित पंक्ति में रखा जाता है। यह एप्पल द्वारा एक थ्रेड बनाने की तुलना में अधिक कुशल के रूप में वर्णित किया गया है जिसका एकमात्र उद्देश्य ट्रिगरिंग के एकल घटना पर प्रतीक्षा करना है।


== विशेषताएं ==
== विशेषताएं ==
डिस्पैच फ्रेमवर्क उन्हें बनाने और हेरफेर करने के लिए कई डेटा प्रकारों और कार्यों की घोषणा करता है:
प्रेषण रूपरेखा उन्हें बनाने और संचालित करने के लिए कई डेटा प्रकारों और कार्यों की घोषणा करता है:
* प्रेषण कतारें ऐसी वस्तुएं हैं जो कार्यों की एक कतार बनाए रखती हैं, या तो अनाम कोड ब्लॉक या फ़ंक्शन, और इन कार्यों को अपनी बारी में निष्पादित करती हैं। पुस्तकालय स्वचालित रूप से विभिन्न प्राथमिकता स्तरों के साथ कई कतारें बनाता है जो ऑपरेटिंग वातावरण के आधार पर चलने के लिए इष्टतम संख्या का चयन करते हुए कई कार्यों को समवर्ती रूप से निष्पादित करते हैं। लाइब्रेरी के लिए एक ग्राहक किसी भी संख्या में सीरियल क्यू भी बना सकता है, जो एक बार में सबमिट किए गए क्रम में कार्यों को निष्पादित करता है।<ref name=OSConcepts />चूंकि एक सीरियल कतार एक समय में केवल एक कार्य चला सकती है, कतार में सबमिट किया गया प्रत्येक कार्य कतार पर अन्य कार्यों के संबंध में महत्वपूर्ण है, और इस प्रकार एक तर्कबद्ध पर लॉक (कंप्यूटर विज्ञान) के बजाय एक सीरियल कतार का उपयोग किया जा सकता है। संसाधन।
* प्रेषण पंक्ति ऐसी वस्तुएं हैं जो कार्यों की पंक्ति बनाए रखती हैं, या तो अज्ञात कोड ब्लॉक या कार्यक्रम, और इन कार्यों को अपने पंक्ति में निष्पादित करती हैं। लाइब्रेरी स्वचालित रूप से विभिन्न प्राथमिकता स्तरों के साथ कई क्रमें बनाता है जो संचालन परिस्थिति के आधार पर चलने के लिए इष्टतम संख्या का चयन करते हुए कई कार्यों को समवर्ती रूप से निष्पादित करते हैं। लाइब्रेरी के लिए ग्राहक किसी भी संख्या में क्रमिक पंक्ति भी बना सकता है, जो एक बार में प्रस्तुत किए गए पंक्ति में कार्यों को निष्पादित करता है।<ref name=OSConcepts /> चूंकि क्रमिक पंक्ति एक समय में केवल एक कार्य चला सकती है,पंक्ति में प्रस्तुत किया गया प्रत्येक कार्य पंक्ति पर अन्य कार्यों के संबंध में महत्वपूर्ण है, और इस प्रकार एक क्रमिक पंक्ति का उपयोग आलोचनात्मक संसाधन पर लॉक (कंप्यूटर विज्ञान) लगाने के अतिरिक्त किया जा सकता है।
* डिस्पैच स्रोत ऐसी वस्तुएं हैं जो क्लाइंट को ब्लॉक या फ़ंक्शंस को सिस्टम ईवेंट पर अतुल्यकालिक रूप से निष्पादित करने के लिए पंजीकृत करने की अनुमति देती हैं, जैसे कि [[यूनिक्स डोमेन सॉकेट]] या [[फाइल डिस्क्रिप्टर]] पढ़ने या लिखने के लिए तैयार है, या एक POSIX [[सिग्नल (कंप्यूटिंग)]]।
* प्रेषण स्रोत ऐसी वस्तुएं हैं जो ग्राहक को ब्लॉक या फ़ंक्शंस को सिस्टम घटना पर अतुल्यकालिक रूप से निष्पादित करने के लिए पंजीकृत करने की अनुमति देती हैं, जैसे कि [[यूनिक्स डोमेन सॉकेट]] या [[फाइल डिस्क्रिप्टर]] पढ़ने या लिखने के लिए तैयार होना, या पॉज़िक्स [[सिग्नल (कंप्यूटिंग)]]।
* डिस्पैच ग्रुप ऐसे ऑब्जेक्ट हैं जो कई कार्यों को बाद में शामिल होने के लिए समूहीकृत करने की अनुमति देते हैं। समूह के सदस्य के रूप में कार्य कतार में जोड़े जा सकते हैं, और तब ग्राहक समूह ऑब्जेक्ट का उपयोग उस समूह के सभी कार्यों के पूरा होने तक प्रतीक्षा करने के लिए कर सकता है।
* प्रेषण समूह ऐसे ऑब्जेक्ट हैं जो पश्चात में सम्मिलित होने के लिए कई कार्यों को समूहीकृत करने की अनुमति देते हैं। समूह के सदस्य के रूप में कार्य पंक्ति में जोड़े जा सकते हैं, और तब ग्राहक समूह ऑब्जेक्ट का उपयोग उस समूह के सभी कार्यों के पूरा होने तक प्रतीक्षा करने के लिए कर सकता है।
* डिस्पैच सेमाफोर ऐसी वस्तुएं हैं जो क्लाइंट को एक साथ निष्पादित करने के लिए केवल कुछ निश्चित कार्यों की अनुमति देती हैं।
* प्रेषण सेमाफोर ऐसी वस्तुएं हैं जो ग्राहक को एक साथ निष्पादित करने के लिए केवल कुछ निश्चित कार्यों की अनुमति देती हैं।


Libdispatch अपने स्वयं के ऑब्जेक्ट मॉडल, OS ऑब्जेक्ट के साथ आता है, जो आंशिक रूप से Objective-C मॉडल के साथ संगत है। नतीजतन, इसकी वस्तुओं को ओबीजेसी वस्तुओं के लिए टोल-फ्री ब्रिज किया जा सकता है।<ref>{{cite web |last1=Bugaev |first1=Sergey |title=मच-ओ लिंकिंग और लोडिंग ट्रिक्स|url=http://blog.darlinghq.org/2018/07/mach-o-linking-and-loading-tricks.html |website=Darling development blog |access-date=15 January 2020}}</ref>
लिबडिस्पैच अपने स्वयं के ऑब्जेक्ट मॉडल, ओएस ऑब्जेक्ट के साथ आता है, जो आंशिक रूप से [[ उद्देश्य सी |ऑब्जेक्टिव सी]] मॉडल के साथ संगत है। फलस्वरूप, इसके ऑब्जेक्ट को ओबीजेसी ऑब्जेक्ट के लिए टोल-फ्री ब्रिज किया जा सकता है।<ref>{{cite web |last1=Bugaev |first1=Sergey |title=मच-ओ लिंकिंग और लोडिंग ट्रिक्स|url=http://blog.darlinghq.org/2018/07/mach-o-linking-and-loading-tricks.html |website=Darling development blog |access-date=15 January 2020}}</ref>




== उदाहरण ==
== उदाहरण ==
{{Manual|date=June 2010}}
ग्रैंड सेंट्रल डिस्पैच के उपयोग को प्रदर्शित करने वाले दो उदाहरण जॉन सिराकुसा की [[आर्स टेक्निका]] स्नो लेपर्ड समीक्षा में देखे जा सकते हैं।<ref name="ars-snow-leopard">[https://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/13 Mac OS X 10.6 Snow Leopard: the Ars Technica review] (accessed September 2, 2009)</ref> प्रारंभ में, आलेख-आधारित एप्लिकेशन में analyzeDocument नामक एक विधि होती है जो आलेख में शब्दों और अनुच्छेदों की संख्या की गणना करने जैसा कुछ कर सकती है। सामान्यतया, यह एक त्वरित प्रक्रिया होगी, और उपयोगकर्ता को बटन दबाने और परिणाम दिखाने के बीच देरी के बिना मुख्य सूत्र में निष्पादित किया जा सकता है।
 
ग्रैंड सेंट्रल डिस्पैच के उपयोग को प्रदर्शित करने वाले दो उदाहरण जॉन सिराकुसा की [[आर्स टेक्निका]] स्नो लेपर्ड समीक्षा में देखे जा सकते हैं।<ref name="ars-snow-leopard">[https://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/13 Mac OS X 10.6 Snow Leopard: the Ars Technica review] (accessed September 2, 2009)</ref> प्रारंभ में, एक दस्तावेज़-आधारित एप्लिकेशन में एक विधि होती है, जिसे कहा जाता है <code>analyzeDocument</code> जो दस्तावेज़ में शब्दों और अनुच्छेदों की संख्या गिनने जैसा कुछ कर सकता है। आम तौर पर, यह एक त्वरित प्रक्रिया होगी, और उपयोगकर्ता को बटन दबाने और परिणाम दिखाने के बीच देरी के बिना मुख्य धागे में निष्पादित किया जा सकता है।


<syntaxhighlight lang="objc">
<syntaxhighlight lang="objc">
Line 51: Line 48:
}
}
</syntaxhighlight>
</syntaxhighlight>
यदि दस्तावेज़ बड़ा है और विश्लेषण को निष्पादित करने में लंबा समय लगता है तो मुख्य थ्रेड फ़ंक्शन के समाप्त होने की प्रतीक्षा करेगा। यदि इसमें पर्याप्त समय लगता है, तो उपयोगकर्ता नोटिस करेगा, और एप्लिकेशन [[ घूमता हुआ पहिया ]] भी कर सकता है। समाधान यहाँ देखा जा सकता है:
यदि आलेख बड़ा है और विश्लेषण को निष्पादित करने में अधिक समय लगता है तो मुख्य थ्रेड कार्यक्रम के समाप्त होने की प्रतीक्षा करेगा। यदि इसमें पर्याप्त समय लगता है, तो उपयोगकर्ता नोटिस करेगा, और एप्लिकेशन [[ घूमता हुआ पहिया |" बीचबाल]] " भी कर सकता है। समाधान यहाँ देखा जा सकता है:


<syntaxhighlight lang="objc">
<syntaxhighlight lang="objc">
Line 64: Line 61:
}
}
</syntaxhighlight>
</syntaxhighlight>
यहाँ, कॉल करने के लिए <code>[myDoc analyze]</code> एक अज्ञात फ़ंक्शन के अंदर रखा जाता है, जिसे बाद में वैश्विक समवर्ती कतारों में से एक पर रखा जाता है। इसके चलने के बाद <code>[myDoc analyze]</code>, मुख्य कतार (जिस पर एप्लिकेशन का मुख्य थ्रेड चलता है) पर एक नया ब्लॉक रखा गया है, जो [[GUI]] को अपडेट करता है (यह आवश्यक है क्योंकि GUI को केवल मुख्य थ्रेड द्वारा अपडेट किया जा सकता है)। इन दो छोटे बदलावों को करके, डेवलपर ने उपयोगकर्ता द्वारा देखे गए एप्लिकेशन के संभावित स्टाल से बचा लिया है, और अपने एप्लिकेशन को हार्डवेयर संसाधनों का बेहतर उपयोग करने की अनुमति दी है।
यहाँ, [myDoc analyze] के लिए कॉल को एक ब्लॉक के अंदर रखा जाता है, जिसे पश्चात में वैश्विक समवर्ती क्रमों में से एक पर रखा जाता है। इसके चलने के पश्चात <code>[myDoc analyze]</code>, मुख्य पंक्ति (जिस पर एप्लिकेशन का मुख्य थ्रेड चलता है) पर एक नया ब्लॉक रखा गया है, जो जीयूआई को अपडेट करता है (यह आवश्यक है क्योंकि जीयूआई को केवल मुख्य थ्रेड द्वारा अपडेट किया जा सकता है)। इन दो छोटे परिवर्तन को करके, निर्माता ने उपयोगकर्ता द्वारा देखे गए एप्लिकेशन के संभावित स्टाल से बचा लिया है, और अपने एप्लिकेशन को हार्डवेयर संसाधनों का उचित उपयोग करने की अनुमति दी है।


दूसरा उदाहरण for लूप को समानांतर करने का है:
दूसरा उदाहरण फॉर लूप को समानांतर करने का है:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 74: Line 71:
total = summarize(results, count);
total = summarize(results, count);
</syntaxhighlight>
</syntaxhighlight>
यह कोड चलाता है <code>do_work</code> समारोह <code>count</code> बार, i असाइन करना<sub>th</sub> आई के परिणाम<sub>th</sub> सरणी में तत्व <code>results</code>, और उसके बाद लूप समाप्त होने के बाद सरणी पर सारांशित करें। दुर्भाग्य से काम की गणना क्रमिक रूप से की जाती है, जहाँ इसकी आवश्यकता नहीं हो सकती है। यह मानते हुए कि do_work इसे किए गए किसी भी अन्य कॉल के परिणामों पर भरोसा नहीं करता है, ऐसा कोई कारण नहीं है कि इन कॉलों को एक साथ नहीं किया जा सकता है। जीसीडी में यह कैसे किया जाएगा:
यह कोड <code>do_work</code> कार्य <code>count</code> बार पर चलाता है, सरणी परिणामों में i<sub>th</sub>वें तत्व को i<sub>th</sub> results निर्दिष्ट करना, और उसके पश्चात लूप समाप्त होने के पश्चात सरणी पर सारांशित करें। दुर्भाग्य से कार्य की गणना क्रमिक रूप से की जाती है, जहाँ इसकी आवश्यकता नहीं हो सकती है। यह मानते हुए कि do_work इसे किए गए किसी भी अन्य कॉल के परिणामों पर विश्वास नहीं करता है, ऐसा कोई कारण नहीं है कि इन कॉलों को एक साथ नहीं किया जा सकता है। जीसीडी में यह कैसे किया जाएगा:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 82: Line 79:
total = summarize(results, count);
total = summarize(results, count);
</syntaxhighlight>
</syntaxhighlight>
यहाँ, <code>dispatch_apply</code> इसे दिए गए ब्लॉक को चलाता है, <code>count</code> समय, प्रत्येक मंगलाचरण को एक वैश्विक कतार में रखना, और प्रत्येक आह्वान को 0 से एक अलग संख्या में पारित करना <code>count</code>-1। यह ओएस को काम को फैलाने की इजाजत देगा क्योंकि यह फिट दिखता है, मौजूदा हार्डवेयर और सिस्टम लोड के लिए चलने वाले धागे की इष्टतम संख्या चुनता है। <code>dispatch_apply</code> यह तब तक वापस नहीं आता जब तक कि दी गई कतार में रखे गए सभी ब्लॉकों का निष्पादन पूरा नहीं हो जाता, ताकि यह गारंटी दी जा सके कि कॉल करने से पहले मूल लूप के अंदर सभी काम पूरे हो गए हैं <code>summarize</code>.
यहाँ, <code>dispatch_apply</code> इसे दिए गए ब्लॉक को चलाता है, <code>count</code> समय, प्रत्येक आह्वान को एक वैश्विक पंक्ति में रखना, और प्रत्येक ब्लॉक आह्वान को 0 से एक अलग संख्या <code>count</code>-1 में पारित करना। यह ओएस को कार्य को विस्तार की अनुमति देगा क्योंकि यह उपयुक्त दिखता है,वर्तमान समय में हार्डवेयर और सिस्टम लोड के लिए चलने वाले थ्रेड की इष्टतम संख्या चुनता है। <code>dispatch_apply</code> यह तब तक वापस नहीं आता जब तक कि दी गई पंक्ति में रखे गए सभी ब्लॉकों का निष्पादन पूरा नहीं हो जाता, जिससे कि यह गारंटी दी जा सके कि कॉल करने से पहले मूल लूप के अंदर सभी कार्य पूरे हो गए हैं <code>summarize</code>.


प्रोग्रामर उन कार्यों के लिए अपनी खुद की सीरियल कतारें बना सकते हैं जिन्हें वे जानते हैं कि उन्हें क्रमिक रूप से चलना चाहिए लेकिन जिन्हें एक अलग थ्रेड पर निष्पादित किया जा सकता है। एक नई कतार इस प्रकार बनाई जाएगी:
प्रोग्रामर उन कार्यों के लिए अपनी स्वयं की क्रमिक पंक्ति बना सकते हैं जिन्हें वे जानते हैं कि उन्हें क्रमिक रूप से चलना चाहिए लेकिन जिन्हें एक अलग थ्रेड पर निष्पादित किया जा सकता है। एक नई पंक्ति इस प्रकार बनाई जाएगी:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 94: Line 91:
dispatch_release( exampleQueue );
dispatch_release( exampleQueue );
</syntaxhighlight>
</syntaxhighlight>
कतार पर एक डिस्पैच किए गए ब्लॉक से बचने के लिए सावधानी बरती जानी चाहिए क्योंकि यह गतिरोध की गारंटी है। ऐसा कोड निम्न कार्य कर सकता है:
क्रम पर एक डिस्पैच किए गए ब्लॉक से बचने के लिए सावधानी बरती जानी चाहिए क्योंकि यह गतिरोध की गारंटी है। ऐसा कोड निम्न कार्य कर सकता है:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
dispatch_queue_t exampleQueue = dispatch_queue_create( "com.example.unique.identifier", NULL );
dispatch_queue_t exampleQueue = dispatch_queue_create( "com.example.unique.identifier", NULL );
Line 110: Line 107:
== अनुप्रयोग ==
== अनुप्रयोग ==


जीसीडी का उपयोग पूरे macOS (10.6 स्नो लेपर्ड से शुरू) में किया जाता है, और एप्पल ने macOS एप्लिकेशन डेवलपर्स द्वारा इसे अपनाने के लिए प्रोत्साहित किया है। FreeBSD डेवलपर [[रॉबर्ट वाटसन (कंप्यूटर वैज्ञानिक)]] ने 11 मई, 2010 को Apache जीसीडी MPM (मल्टी-प्रोसेसिंग मॉड्यूल) के माध्यम से जीसीडी का उपयोग करने के लिए एक प्रमुख ओपन सोर्स एप्लिकेशन, Apache HTTP सर्वर के पहले अनुकूलन की घोषणा की, ताकि प्रोग्रामिंग को स्पष्ट किया जा सके। मॉडल और जीसीडी को मौजूदा, बड़े पैमाने पर बहु-थ्रेडेड, अनुप्रयोगों में कैसे एकीकृत किया जाए। उनकी घोषणा ने देखा कि जीसीडी एमपीएम में अन्य थ्रेडेड एमपीएम के रूप में लाइनों की संख्या एक तिहाई से आधी थी।<ref name="libdispatch-apache-announcement">[http://lists.macosforge.org/pipermail/libdispatch-dev/2010-May/000352.html libdispatch-dev GCD MPM for Apache] (accessed May 14, 2010)</ref><ref name="apache-gcd-mpm">[http://libdispatch.macosforge.org/trac/wiki/apache apache-libdispatch] (accessed May 14, 2010)</ref>
जीसीडी का उपयोग पूरे मैक ओएस (10.6 स्नो लेपर्ड से आरम्भ) में किया जाता है, और एप्पल ने मैक ओएस एप्लिकेशन डेवलपर्स द्वारा इसे अपनाने के लिए प्रोत्साहित किया है। फ्री बीएसडी डेवलपर [[रॉबर्ट वाटसन (कंप्यूटर वैज्ञानिक)]] ने 11 मई, 2010 को अपाचे जीसीडी एमपीएम (मल्टी-प्रोसेसिंग मॉड्यूल) के माध्यम से जीसीडी का उपयोग करने के लिए एक प्रमुख ओपन सोर्स एप्लिकेशन, अपाचे एचटीटीपी सर्वर के पहले अनुकूलन की घोषणा की, जिससे कि प्रोग्रामिंग को स्पष्ट किया जा सके। मॉडल और जीसीडी को वर्तमान समय में, वृहद् स्तर पर बहु-थ्रेडेड, अनुप्रयोगों में कैसे एकीकृत किया जाए। उनकी घोषणा ने देखा कि जीसीडी एमपीएम में अन्य थ्रेडेड एमपीएम के रूप में लाइनों की संख्या एक तिहाई से आधी थी।<ref name="libdispatch-apache-announcement">[http://lists.macosforge.org/pipermail/libdispatch-dev/2010-May/000352.html libdispatch-dev GCD MPM for Apache] (accessed May 14, 2010)</ref><ref name="apache-gcd-mpm">[http://libdispatch.macosforge.org/trac/wiki/apache apache-libdispatch] (accessed May 14, 2010)</ref>




== आंतरिक ==
== आंतरिक ==
जीसीडी को libdispatch द्वारा कार्यान्वित किया गया है, एप्पल द्वारा विकसित pthreads गैर-POSIX एक्सटेंशन के समर्थन से। जीसीडी (10.6), माउंटेन लायन (10.8) और मावेरिक्स (10.9) के आधिकारिक लॉन्च के माध्यम से एप्पल ने अपनी स्थापना के बाद से (OS X 10.5 में) इंटरफ़ेस बदल दिया है। नवीनतम परिवर्तनों में उपयोगकर्ता मोड और कर्नेल दोनों में pthreads का समर्थन करने वाले कोड बनाना शामिल है, निजी (कर्नेल pthread समर्थन के साथ केवल शिम्स तक कम हो गया है, और वास्तविक कार्य कतार कार्यान्वयन एक अलग कर्नेल एक्सटेंशन में चला गया है)।<ref name="GCD Internals">{{cite web |url=http://newosxbook.com/articles/GCD.html |title=GCD Internals: The undocumented side of the Grand Central Dispatcher |last1=Levin |first1=Jonathan |date=15 February 2014 |access-date=17 March 2014}}</ref>
जीसीडी को लिबडिस्पैच द्वारा कार्यान्वित किया गया है, एप्पल द्वारा विकसित पीथ्रेड अन्य-पॉज़िक्स एक्सटेंशन के समर्थन से। जीसीडी (10.6), माउंटेन लायन (10.8) और मावेरिक्स (10.9) के आधिकारिक लॉन्च के माध्यम से एप्पल ने अपनी स्थापना के पश्चात से (ओएस X 10.5 में) इंटरफ़ेस परिवर्तित कर दिया है। नवीनतम परिवर्तनों में उपयोगकर्ता मोड और कर्नेल दोनों में पीथ्रेड का समर्थन करने वाले कोड बनाना सम्मिलित है, निजी (कर्नेल पीथ्रेड समर्थन के साथ केवल शिम्स तक कम हो गया है, और वास्तविक कार्य पंक्ति कार्यान्वयन एक अलग कर्नेल एक्सटेंशन में चला गया है)।<ref name="GCD Internals">{{cite web |url=http://newosxbook.com/articles/GCD.html |title=GCD Internals: The undocumented side of the Grand Central Dispatcher |last1=Levin |first1=Jonathan |date=15 February 2014 |access-date=17 March 2014}}</ref>
अन्य प्रणालियों पर, libdispatch सिस्टम की स्वयं की ईवेंट सुविधाओं (epoll, kevent, या Windows NT) का उपयोग करके अपने स्वयं के वर्कक्यू को लागू करता है। MacOS पर, kevent का उपयोग कर्नेल वर्कक्यू के साथ किया जाता है।
 
अन्य प्रणालियों पर, लिबडिस्पैच सिस्टम की स्वयं की घटना सुविधाओं (एपोल, केवेंट, या विंडोज एनटी) का उपयोग करके अपने स्वयं की कार्य पंक्ति को लागू करता है। मैक ओएस पर, केवेंट का उपयोग कर्नेल कार्य पंक्ति के साथ किया जाता है।


== यह भी देखें ==
== यह भी देखें ==


* [[कार्य समानांतर पुस्तकालय]]
* [[कार्य समानांतर पुस्तकालय|कार्य समानांतर लाइब्रेरी]]
* जावा समवर्ती
* जावा समवर्ती
* [[ओपनएमपी]]
* [[ओपनएमपी]]
Line 131: Line 129:
== बाहरी संबंध ==
== बाहरी संबंध ==
* [https://apple.github.io/swift-corelibs-libdispatch/ जीसीडी project on GitHub]
* [https://apple.github.io/swift-corelibs-libdispatch/ जीसीडी project on GitHub]
* [https://developer.apple.com/documentation/dispatch जीसीडी Reference from the Mac Developer Library]
* [https://developer.apple.com/documentation/dispatch जीसीडी Reference from the मैक Developer Library]
* [https://web.archive.org/web/20130504142911/http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/_index.html The ''Introducing Blocks and Grand Central Dispatch'' article from the Mac Developer Library]
* [https://web.archive.org/web/20130504142911/http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/_index.html The ''Introducing Blocks and Grand Central Dispatch'' article from the मैक Developer Library]
 
{{Mac OS X}}
[[Category: मैक ओएस]] [[Category: समानांतर कंप्यूटिंग]]
 
 


[[Category: Machine Translated Page]]
[[Category:CS1 maint]]
[[Category:Collapse templates]]
[[Category:Created On 02/03/2023]]
[[Category:Created On 02/03/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with broken file links]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Webarchive template wayback links]]
[[Category:Wikipedia metatemplates]]
[[Category:मैक ओएस]]
[[Category:समानांतर कंप्यूटिंग]]

Latest revision as of 16:55, 2 November 2023

Original author(s)डेव जर्ज़की
Developer(s)एप्पल इंक.
Operating systemमैक ओएस एक्स 10.6 (2009) और बाद में, आईओएस 4.0 और बाद में,[1] वॉचओएस, टीवीओएस, फ्रीबीएसडी
Type सिस्टम यूटिलिटी
License अपाचे 2.0
Websitehttps://apple.github.io/swift-corelibs-libdispatch/

ग्रैंड सेंट्रल डिस्पैच (जीसीडी या लिबडिस्पैच), मल्टी-कोर (कम्प्यूटिंग) | मल्टी-कोर प्रोसेसर और अन्य सममितीय मल्टीप्रोसेसिंग सिस्टम वाले सिस्टम के लिए एप्लिकेशन सपोर्ट को अनुकूलित करने के लिए एप्पल इनकॉरपोरेटेड द्वारा विकसित एक विधि है।[2] यह थ्रेड पूल पैटर्न के आधार पर कार्य समानता का क्रियान्वयन है। मौलिक विचार थ्रेड पूल के प्रबंधन को डेवलपर के हाथों से बाहर और ऑपरेटिंग सिस्टम के निकट ले जाना है। डेवलपर पूल के वास्तु-कला से निश्चिंत हो कर कार्य के पैकेज को पूल में इंजेक्ट करता है। यह मॉडल सरलता, सुवाह्यता और प्रदर्शन में सुधार करता है।

जीसीडी को सबसे पहले मैकओएस X 10.6 के साथ रिलीज़ किया गया था, और यह आईओएस (एप्पल) 4 और इसके पश्चात के संस्करण के साथ भी उपलब्ध है। ग्रैंड सेंट्रल डिस्पैच शीर्षकभव्य केन्द्रीय टर्मिनल का एक संदर्भ है।

लाइब्रेरी के लिए स्रोत कोड जो जीसीडी की सेवाओं का कार्यान्वयन प्रदान करता है, लिबडिस्पैच, एप्पल द्वारा 10 सितंबर, 2009 को अपाचे लाइसेंस के अनुसार जारी किया गया था।[3] इसे पोर्ट किया गया है[4] फ्रीबीएसडी 8.1+ के लिए,[5] मिडनाइटबीएसडी 0.3+,[6] लिनक्स, और सोलारिस।[7][8] 2011 में विंडोज़ पर लिबडिस्पैच कार्य करने के प्रयासों को प्रतिकूल में विलय नहीं किया गया था।[9][10] सफारी और आईट्यून्स के साथ भेजे गए विंडोज के लिए एप्पल के पास लिबडिस्पैच.dll का अपना पोर्ट है, लेकिन कोई सॉफ़्टवेयर विकास किट प्रदान नहीं किया गया है।

2017 के पश्चात से, निक हचिंसन द्वारा आतिथेय किया गया मूल लिबडिस्पैच रिपॉजिटरी[11] जून 2016 में बनाए गए स्विफ्ट (प्रोग्रामिंग भाषा) कोर लाइब्रेरी का भाग है जो एक संस्करण के पक्ष में हटा दिया गया था। नया संस्करण अधिक प्लेटफार्मों का समर्थन करता है, विशेष रूप से विंडोज सहित।

डिजाइन

जीसीडी एक प्रोग्राम में विशिष्ट कार्य (कंप्यूटिंग) की अनुमति देकर कार्य करता है जिसे निष्पादन के लिए क्रमबद्ध करने के लिए समानांतर में चलाया जा सकता है और प्रसंस्करण संसाधनों की उपलब्धता के आधार पर, उन्हें किसी भी उपलब्ध प्रोसेसर कोर पर निष्पादित करने के लिए शेड्यूलिंग (कंप्यूटिंग) किया जाता है।[12][13] (एप्पल द्वारा मार्ग के रूप में संदर्भित)।[14]

कार्य या तो एक कार्यक्रम के रूप में या ब्लॉक (सी भाषा विस्तार) के रूप में व्यक्त किया जा सकता है।[15] ब्लॉक सी (प्रोग्रामिंग भाषा) , सी ++, और ऑब्जेक्टिव सी प्रोग्रामिंग लैंग्वेज के वाक्य-विन्यास का एक विस्तार है जो एक क्लोजर (कंप्यूटर साइंस) के समान एक ऑब्जेक्ट में कोड और डेटा को एनकैप्सुलेट करता है।[12] जीसीडी अभी भी उन परिस्थिति में उपयोग किया जा सकता है जहां ब्लॉक उपलब्ध नहीं हैं।[16]

ग्रैंड सेंट्रल डिस्पैच अभी भी निम्न स्तर पर थ्रेड्स का उपयोग करता है लेकिन उन्हें प्रोग्रामर से दूर कर देता है, जिन्हें अधिक विवरणों से चिंतित होने की आवश्यकता नहीं होगी। जीसीडी में कार्य बनाने और क्रमबद्ध करने में सहज होते हैं; एप्पल का कहना है कि जीसीडी में कार्य इकाई को पंक्तिबद्ध करने के लिए 15 निर्देशों की आवश्यकता होती है, जबकि पारंपरिक थ्रेड बनाने के लिए सरलता से कई सौ निर्देशों की आवश्यकता हो सकती है।[12]

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

विशेषताएं

प्रेषण रूपरेखा उन्हें बनाने और संचालित करने के लिए कई डेटा प्रकारों और कार्यों की घोषणा करता है:

  • प्रेषण पंक्ति ऐसी वस्तुएं हैं जो कार्यों की पंक्ति बनाए रखती हैं, या तो अज्ञात कोड ब्लॉक या कार्यक्रम, और इन कार्यों को अपने पंक्ति में निष्पादित करती हैं। लाइब्रेरी स्वचालित रूप से विभिन्न प्राथमिकता स्तरों के साथ कई क्रमें बनाता है जो संचालन परिस्थिति के आधार पर चलने के लिए इष्टतम संख्या का चयन करते हुए कई कार्यों को समवर्ती रूप से निष्पादित करते हैं। लाइब्रेरी के लिए ग्राहक किसी भी संख्या में क्रमिक पंक्ति भी बना सकता है, जो एक बार में प्रस्तुत किए गए पंक्ति में कार्यों को निष्पादित करता है।[13] चूंकि क्रमिक पंक्ति एक समय में केवल एक कार्य चला सकती है,पंक्ति में प्रस्तुत किया गया प्रत्येक कार्य पंक्ति पर अन्य कार्यों के संबंध में महत्वपूर्ण है, और इस प्रकार एक क्रमिक पंक्ति का उपयोग आलोचनात्मक संसाधन पर लॉक (कंप्यूटर विज्ञान) लगाने के अतिरिक्त किया जा सकता है।
  • प्रेषण स्रोत ऐसी वस्तुएं हैं जो ग्राहक को ब्लॉक या फ़ंक्शंस को सिस्टम घटना पर अतुल्यकालिक रूप से निष्पादित करने के लिए पंजीकृत करने की अनुमति देती हैं, जैसे कि यूनिक्स डोमेन सॉकेट या फाइल डिस्क्रिप्टर पढ़ने या लिखने के लिए तैयार होना, या पॉज़िक्स सिग्नल (कंप्यूटिंग)
  • प्रेषण समूह ऐसे ऑब्जेक्ट हैं जो पश्चात में सम्मिलित होने के लिए कई कार्यों को समूहीकृत करने की अनुमति देते हैं। समूह के सदस्य के रूप में कार्य पंक्ति में जोड़े जा सकते हैं, और तब ग्राहक समूह ऑब्जेक्ट का उपयोग उस समूह के सभी कार्यों के पूरा होने तक प्रतीक्षा करने के लिए कर सकता है।
  • प्रेषण सेमाफोर ऐसी वस्तुएं हैं जो ग्राहक को एक साथ निष्पादित करने के लिए केवल कुछ निश्चित कार्यों की अनुमति देती हैं।

लिबडिस्पैच अपने स्वयं के ऑब्जेक्ट मॉडल, ओएस ऑब्जेक्ट के साथ आता है, जो आंशिक रूप से ऑब्जेक्टिव सी मॉडल के साथ संगत है। फलस्वरूप, इसके ऑब्जेक्ट को ओबीजेसी ऑब्जेक्ट के लिए टोल-फ्री ब्रिज किया जा सकता है।[17]


उदाहरण

ग्रैंड सेंट्रल डिस्पैच के उपयोग को प्रदर्शित करने वाले दो उदाहरण जॉन सिराकुसा की आर्स टेक्निका स्नो लेपर्ड समीक्षा में देखे जा सकते हैं।[18] प्रारंभ में, आलेख-आधारित एप्लिकेशन में analyzeDocument नामक एक विधि होती है जो आलेख में शब्दों और अनुच्छेदों की संख्या की गणना करने जैसा कुछ कर सकती है। सामान्यतया, यह एक त्वरित प्रक्रिया होगी, और उपयोगकर्ता को बटन दबाने और परिणाम दिखाने के बीच देरी के बिना मुख्य सूत्र में निष्पादित किया जा सकता है।

- (IBAction)analyzeDocument:(NSButton *)sender {
    NSDictionary *stats = [myDoc analyze];
    [myModel setDict:stats];
    [myStatsView setNeedsDisplay:YES];
}

यदि आलेख बड़ा है और विश्लेषण को निष्पादित करने में अधिक समय लगता है तो मुख्य थ्रेड कार्यक्रम के समाप्त होने की प्रतीक्षा करेगा। यदि इसमें पर्याप्त समय लगता है, तो उपयोगकर्ता नोटिस करेगा, और एप्लिकेशन " बीचबाल " भी कर सकता है। समाधान यहाँ देखा जा सकता है:

- (IBAction)analyzeDocument:(NSButton *)sender {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSDictionary *stats = [myDoc analyze];
        dispatch_async(dispatch_get_main_queue(), ^{
            [myModel setDict:stats];
            [myStatsView setNeedsDisplay:YES];
        });
    });
}

यहाँ, [myDoc analyze] के लिए कॉल को एक ब्लॉक के अंदर रखा जाता है, जिसे पश्चात में वैश्विक समवर्ती क्रमों में से एक पर रखा जाता है। इसके चलने के पश्चात [myDoc analyze], मुख्य पंक्ति (जिस पर एप्लिकेशन का मुख्य थ्रेड चलता है) पर एक नया ब्लॉक रखा गया है, जो जीयूआई को अपडेट करता है (यह आवश्यक है क्योंकि जीयूआई को केवल मुख्य थ्रेड द्वारा अपडेट किया जा सकता है)। इन दो छोटे परिवर्तन को करके, निर्माता ने उपयोगकर्ता द्वारा देखे गए एप्लिकेशन के संभावित स्टाल से बचा लिया है, और अपने एप्लिकेशन को हार्डवेयर संसाधनों का उचित उपयोग करने की अनुमति दी है।

दूसरा उदाहरण फॉर लूप को समानांतर करने का है:

for (i = 0; i < count; i++) {
      results[i] = do_work(data, i);
}
total = summarize(results, count);

यह कोड do_work कार्य count बार पर चलाता है, सरणी परिणामों में ithवें तत्व को ith results निर्दिष्ट करना, और उसके पश्चात लूप समाप्त होने के पश्चात सरणी पर सारांशित करें। दुर्भाग्य से कार्य की गणना क्रमिक रूप से की जाती है, जहाँ इसकी आवश्यकता नहीं हो सकती है। यह मानते हुए कि do_work इसे किए गए किसी भी अन्य कॉल के परिणामों पर विश्वास नहीं करता है, ऐसा कोई कारण नहीं है कि इन कॉलों को एक साथ नहीं किया जा सकता है। जीसीडी में यह कैसे किया जाएगा:

dispatch_apply(count, dispatch_get_global_queue(0, 0), ^(size_t i){
     results[i] = do_work(data, i);
    });
total = summarize(results, count);

यहाँ, dispatch_apply इसे दिए गए ब्लॉक को चलाता है, count समय, प्रत्येक आह्वान को एक वैश्विक पंक्ति में रखना, और प्रत्येक ब्लॉक आह्वान को 0 से एक अलग संख्या count-1 में पारित करना। यह ओएस को कार्य को विस्तार की अनुमति देगा क्योंकि यह उपयुक्त दिखता है,वर्तमान समय में हार्डवेयर और सिस्टम लोड के लिए चलने वाले थ्रेड की इष्टतम संख्या चुनता है। dispatch_apply यह तब तक वापस नहीं आता जब तक कि दी गई पंक्ति में रखे गए सभी ब्लॉकों का निष्पादन पूरा नहीं हो जाता, जिससे कि यह गारंटी दी जा सके कि कॉल करने से पहले मूल लूप के अंदर सभी कार्य पूरे हो गए हैं summarize.

प्रोग्रामर उन कार्यों के लिए अपनी स्वयं की क्रमिक पंक्ति बना सकते हैं जिन्हें वे जानते हैं कि उन्हें क्रमिक रूप से चलना चाहिए लेकिन जिन्हें एक अलग थ्रेड पर निष्पादित किया जा सकता है। एक नई पंक्ति इस प्रकार बनाई जाएगी:

dispatch_queue_t exampleQueue;
exampleQueue = dispatch_queue_create( "com.example.unique.identifier", NULL );

// exampleQueue may be used here.

dispatch_release( exampleQueue );

क्रम पर एक डिस्पैच किए गए ब्लॉक से बचने के लिए सावधानी बरती जानी चाहिए क्योंकि यह गतिरोध की गारंटी है। ऐसा कोड निम्न कार्य कर सकता है:

dispatch_queue_t exampleQueue = dispatch_queue_create( "com.example.unique.identifier", NULL );

dispatch_sync( exampleQueue, ^{
  dispatch_sync( exampleQueue, ^{
    printf( "I am now deadlocked...\n" );
  });
});

dispatch_release( exampleQueue );


अनुप्रयोग

जीसीडी का उपयोग पूरे मैक ओएस (10.6 स्नो लेपर्ड से आरम्भ) में किया जाता है, और एप्पल ने मैक ओएस एप्लिकेशन डेवलपर्स द्वारा इसे अपनाने के लिए प्रोत्साहित किया है। फ्री बीएसडी डेवलपर रॉबर्ट वाटसन (कंप्यूटर वैज्ञानिक) ने 11 मई, 2010 को अपाचे जीसीडी एमपीएम (मल्टी-प्रोसेसिंग मॉड्यूल) के माध्यम से जीसीडी का उपयोग करने के लिए एक प्रमुख ओपन सोर्स एप्लिकेशन, अपाचे एचटीटीपी सर्वर के पहले अनुकूलन की घोषणा की, जिससे कि प्रोग्रामिंग को स्पष्ट किया जा सके। मॉडल और जीसीडी को वर्तमान समय में, वृहद् स्तर पर बहु-थ्रेडेड, अनुप्रयोगों में कैसे एकीकृत किया जाए। उनकी घोषणा ने देखा कि जीसीडी एमपीएम में अन्य थ्रेडेड एमपीएम के रूप में लाइनों की संख्या एक तिहाई से आधी थी।[19][20]


आंतरिक

जीसीडी को लिबडिस्पैच द्वारा कार्यान्वित किया गया है, एप्पल द्वारा विकसित पीथ्रेड अन्य-पॉज़िक्स एक्सटेंशन के समर्थन से। जीसीडी (10.6), माउंटेन लायन (10.8) और मावेरिक्स (10.9) के आधिकारिक लॉन्च के माध्यम से एप्पल ने अपनी स्थापना के पश्चात से (ओएस X 10.5 में) इंटरफ़ेस परिवर्तित कर दिया है। नवीनतम परिवर्तनों में उपयोगकर्ता मोड और कर्नेल दोनों में पीथ्रेड का समर्थन करने वाले कोड बनाना सम्मिलित है, निजी (कर्नेल पीथ्रेड समर्थन के साथ केवल शिम्स तक कम हो गया है, और वास्तविक कार्य पंक्ति कार्यान्वयन एक अलग कर्नेल एक्सटेंशन में चला गया है)।[21]

अन्य प्रणालियों पर, लिबडिस्पैच सिस्टम की स्वयं की घटना सुविधाओं (एपोल, केवेंट, या विंडोज एनटी) का उपयोग करके अपने स्वयं की कार्य पंक्ति को लागू करता है। मैक ओएस पर, केवेंट का उपयोग कर्नेल कार्य पंक्ति के साथ किया जाता है।

यह भी देखें

संदर्भ

  1. "Grand Central Dispatch (GCD) Reference". Apple Inc.
  2. Apple Previews Mac OS X Snow Leopard to Developers Archived March 18, 2012, at the Wayback Machine, June 9, 2008.
  3. "ग्रैंड सेंट्रल डिस्पैच". apple.github.io.
  4. "GCD libdispatch w/Blocks support working on FreeBSD". Archived from the original on July 27, 2011. Retrieved September 28, 2009.
  5. "FreeBSD तिमाही स्थिति रिपोर्ट". www.freebsd.org.
  6. "libdispatch". Just Journal.
  7. libdispatch mailing list: "Porting status Linux" April 10, 2011
  8. libdispatch mailing list: "Porting status Solaris x86/64" April 10, 2011
  9. libdispatch mailing list: "libdispatch for Win32" April 22, 2011
  10. libdispatch mailing list: "Updates regarding the status of libdispatch on Windows" May 5, 2011
  11. Hutchinson, Nicholas (10 January 2020). "libdispatch". GitHub. Retrieved 15 January 2020.
  12. 12.0 12.1 12.2 "ग्रैंड सेंट्रल डिस्पैच पर एप्पल टेक्निकल ब्रीफ" (PDF). Archived from the original on September 20, 2009. Retrieved September 12, 2009.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  13. 13.0 13.1 Gagne, Abraham Silberschatz, Peter Baer Galvin, Greg (2013). ऑपरेटिंग सिस्टम की अवधारणाएँ (9th ed.). Hoboken, N.J.: Wiley. pp. 182–183. ISBN 9781118063330.{{cite book}}: CS1 maint: multiple names: authors list (link)
  14. "WWDC 2008: New in Mac OS X Snow Leopard". Archived from the original on October 17, 2008. Retrieved June 18, 2008.
  15. "ग्रैंड सेंट्रल डिस्पैच (जीसीडी) संदर्भ". Retrieved September 13, 2009.
  16. "GrandCentralDispatch - FreeBSD Wiki".
  17. Bugaev, Sergey. "मच-ओ लिंकिंग और लोडिंग ट्रिक्स". Darling development blog. Retrieved 15 January 2020.
  18. Mac OS X 10.6 Snow Leopard: the Ars Technica review (accessed September 2, 2009)
  19. libdispatch-dev GCD MPM for Apache (accessed May 14, 2010)
  20. apache-libdispatch (accessed May 14, 2010)
  21. Levin, Jonathan (15 February 2014). "GCD Internals: The undocumented side of the Grand Central Dispatcher". Retrieved 17 March 2014.


बाहरी संबंध