2012-02-08 12 views
18

मैं जीसीडी के लिए प्रेषण कतारों पर दस्तावेज़ पढ़ रहा हूं, और इसमें वे कहते हैं कि कतार फीफो हैं, इसलिए मैं एसिंक/सिंक प्रेषण पर इसका क्या प्रभाव डाल रहा हूं?ग्रैंड सेंट्रल डिस्पैच एसिंक बनाम सिंक

मेरी समझ में async आदेश जबकि सिंक बातें धारावाहिक निष्पादित करता है कि यह बातें हो जाता है में चीजों को कार्यान्वित से ..

लेकिन जब आप अपने GCD कोड लिखने के रूप में आप जो में बातें होती हैं क्रम तय .. इसलिए जब तक अपने पता है कि आपके कोड में क्या चल रहा है, आपको उस क्रम को जानना चाहिए जिसमें चीजें निष्पादित होती हैं ..

मेरे प्रश्न हैं, यहां एसिंक का लाभ है? क्या मैं इन दो चीजों की मेरी समझ में कुछ खो रहा हूं।

उत्तर

12

सिंक का अर्थ है कि फ़ंक्शन वर्तमान थ्रेड को पूरा होने तक बंद कर देगा, async का अर्थ है कि इसे पृष्ठभूमि में संभाला जाएगा और फ़ंक्शन वर्तमान थ्रेड को ब्लॉक नहीं करेगा।

आप ब्लॉक के धारावाहिक निष्पादन एक सीरियल प्रेषण कतार

+0

आह हाँ है कि यह साफ करता है उस के लिए शांत धन्यवाद -

केवल अतुल्यकालिक में हम देरी जोड़ सकते हैं। हां, मैं अब धारावाहिक कतारों का उपयोग कर रहा हूं .. मुझे अभी यकीन नहीं था कि अब लाभ कहां था। धन्यवाद। –

24

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

+0

आपके उत्तर के लिए धन्यवाद। अब यह बहुत अधिक समझ में आता है। –

6

आदमी पृष्ठ से:

बुनियादी बातों

Conceptually, dispatch_sync() is a convenient wrapper around 
dispatch_async() with the addition of a semaphore to wait for completion 
of the block, and a wrapper around the block to signal its completion. 
See dispatch_semaphore_create(3) for more information about dispatch sem- 
aphores. The actual implementation of the dispatch_sync() function may be 
optimized and differ from the above description. 
1

कार्य तुल्यकालिक या असमकालिक किया जा सकता है।

सिंक्रोनस फ़ंक्शन समाप्त होने के बाद ही वर्तमान कतार पर नियंत्रण देता है। यह कतार को अवरुद्ध करता है और कार्य पूरा होने तक प्रतीक्षा करता है।

असीमित फ़ंक्शन अलग कतार पर कार्य करने के बाद सही कतार पर नियंत्रण देता है। यह कार्य पूरा होने तक इंतजार नहीं करता है। यह कतार को अवरुद्ध नहीं करता है। >asyncAfter(deadline: 10..

संबंधित मुद्दे

 संबंधित मुद्दे