बस एक अलग जवाब में पोस्ट किया, लेकिन यहाँ कुछ मैं काफी देर वापस लिखा है:
कतारों पहले एहसास है कि बहुत कम स्तर पर है, वहाँ केवल दो प्रकार के होते हैं, की अवधारणा का सबसे अच्छा तरीका कतार: धारावाहिक और समवर्ती।
सीरियल कतार एकरूप हैं, लेकिन असामान्य हैं। यदि आप प्रत्येक सीरियल कतार में कार्यों का एक गुच्छा देते हैं, तो यह एक समय में केवल एक ही थ्रेड का उपयोग करके उन्हें एक बार चलाएगा। असामान्य पहलू यह है कि धारावाहिक कतार कार्यों के बीच एक अलग थ्रेड पर स्विच कर सकते हैं। सीरियल कतार हमेशा अगले कार्य पर जाने से पहले एक कार्य खत्म होने की प्रतीक्षा करते हैं। इस प्रकार कार्य एफआईएफओ आदेश में पूरा हो गए हैं। आप dispatch_queue_create
के साथ जितनी आवश्यकता हो उतनी सीरियल कतार बना सकते हैं।
मुख्य कतार एक विशेष धारावाहिक कतार है। अन्य धारावाहिक कतारों के विपरीत, जो कि असामान्य हैं, उनमें वे कई धागे "डेटिंग" कर रहे हैं, लेकिन समय पर केवल एक ही, मुख्य कतार मुख्य धागे पर "विवाहित" है और सभी कार्यों को इस पर किया जाता है।मुख्य कतार में नौकरी को रनलोप के साथ अच्छी तरह से व्यवहार करने की आवश्यकता है ताकि छोटे ऑपरेशन यूआई और अन्य महत्वपूर्ण बिट्स को अवरुद्ध न करें। सभी धारावाहिक कतारों की तरह, एफआईएफओ आदेश में कार्य पूरा हो जाते हैं।
यदि सीरियल कतार एकरूप हैं, तो समवर्ती कतार विचित्र हैं। वे किसी भी उपलब्ध थ्रेड पर कार्यों को सबमिट करेंगे या सिस्टम लोड के आधार पर नए धागे भी बनाएंगे। वे अलग-अलग धागे पर एक साथ कई कार्य कर सकते हैं। यह महत्वपूर्ण है कि वैश्विक कतार में सबमिट किए गए कार्य थ्रेड-सुरक्षित हैं और साइड इफेक्ट्स को कम करते हैं। कार्य एफआईएफओ आदेश में निष्पादन के लिए जमा किए जाते हैं, लेकिन पूरा होने का आदेश गारंटी नहीं है। इस लेखन के अनुसार, केवल तीन समवर्ती कतार हैं और आप उन्हें नहीं बना सकते हैं, आप उन्हें केवल dispatch_get_global_queue
के साथ ला सकते हैं।
संपादित: ब्लॉग पोस्ट इस जवाब पर विस्तार: http://amattn.com/p/grand_central_dispatch_gcd_summary_syntax_best_practices.html
हां .. यू गलत जवाब उठाया। रॉबर्ट रयान का जवाब अधिक उपयुक्त है –