Swift कार्य अनुसूचक: iOS/macOS पर GCD, OperationQueue और Timer

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift कार्य अनुसूचक (iOS/macOS): GCD, OperationQueue और Timer

\n

iOS और macOS के विकास में, अतुल्यकालिक कार्यों, विलंबित निष्पादन और बहु-थ्रेडिंग का प्रबंधन एप्लिकेशन के प्रदर्शन और प्रतिक्रियाशीलता का आधार है। Swift में इसके लिए तीन प्रमुख घटकों का उपयोग किया जाता है: GCD (Grand Central Dispatch), OperationQueue और Timer। इस लेख में हम इनमें से प्रत्येक का विस्तार से विश्लेषण करेंगे, कोड उदाहरण दिखाएंगे और समझाएंगे कि कब क्या उपयोग करना चाहिए।

\n\n

1. Grand Central Dispatch (GCD) — DispatchQueue

\n

GCD एक निम्न-स्तरीय C-API है, जिसे Swift DispatchQueue के माध्यम से प्रदान करता है। यह कार्यों को अतुल्यकालिक रूप से, समानांतर या क्रमिक रूप से निष्पादित करने की अनुमति देता है, स्वचालित रूप से थ्रेड्स का प्रबंधन करता है।

\n\n

कतारों के मुख्य प्रकार:

\n
    \n
  • Main Queue — क्रमिक कतार, मुख्य थ्रेड (UI) पर कार्य निष्पादित करती है।
  • \n
  • Global Queues — विभिन्न प्राथमिकताओं (background, user-initiated, utility) वाली समानांतर कतारें।
  • \n
  • Custom Serial/Concurrent Queues — डेवलपर द्वारा बनाई जाती हैं।
  • \n
\n\n

उदाहरण: अतुल्यकालिक डेटा लोडिंग

\n
import Foundation\n\n// वैश्विक पृष्ठभूमि कतार प्राप्त करें\nDispatchQueue.global(qos: .background).async {\n    // भारी कार्य (पार्सिंग, डाउनलोड)\n    let data = try? Data(contentsOf: URL(string: "https://example.com/data.json")!)\n    \n    // UI अपडेट करने के लिए मुख्य थ्रेड पर वापस आएं\n    DispatchQueue.main.async {\n        // इंटरफ़ेस अपडेट करें\n        print("डेटा लोड हुआ: \\(data?.count ?? 0) बाइट्स")\n    }\n}
\n\n

विलंबित निष्पादन (dispatch_after)

\n
let deadline = DispatchTime.now() + 3.0 // 3 सेकंड बाद\nDispatchQueue.main.asyncAfter(deadline: deadline) {\n    print("3 सेकंड बीत गए")\n}
\n\n

कार्य समूह (DispatchGroup)

\n
let group = DispatchGroup()\n\ngroup.enter()\nDispatchQueue.global().async {\n    // कार्य 1\n    Thread.sleep(forTimeInterval: 2)\n    group.leave()\n}\n\ngroup.enter()\nDispatchQueue.global().async {\n    // कार्य 2\n    Thread.sleep(forTimeInterval: 1)\n    group.leave()\n}\n\n// सभी कार्यों के पूरा होने की सूचना\ngroup.notify(queue: .main) {\n    print("सभी कार्य पूर्ण")\n}
\n\n

2. OperationQueue — उच्च-स्तरीय अनुसूचक

\n

OperationQueue GCD के ऊपर बनाया गया है, लेकिन अधिक लचीलापन प्रदान करता है: संचालन के बीच निर्भरताएँ, प्राथमिकताएँ, व्यक्तिगत कार्यों को रद्द करना, समानांतर संचालन की अधिकतम संख्या को सीमित करना आदि सेट किया जा सकता है।

\n\n

संचालन बनाना और निष्पादित करना

\n
let queue = OperationQueue()\nqueue.maxConcurrentOperationCount = 2 // अधिकतम 2 समानांतर कार्य\n\nlet operation1 = BlockOperation {\n    print("संचालन 1")\n    Thread.sleep(forTimeInterval: 1)\n}\n\nlet operation2 = BlockOperation {\n    print("संचालन 2")\n    Thread.sleep(forTimeInterval: 1)\n}\n\n// निर्भरता सेट करें: operation2 केवल operation1 के बाद शुरू होगा\noperation2.addDependency(operation1)\n\nqueue.addOperations([operation1, operation2], waitUntilFinished: false)
\n\n

संचालन रद्द करना

\n
operation1.cancel() // यदि संचालन अभी निष्पादित नहीं हो रहा है तो उसे रद्द करता है\n\n// संचालन के अंदर रद्दीकरण की जाँच\nlet cancellableOp = BlockOperation {\n    if !cancellableOp.isCancelled {\n        print("निष्पादित हो रहा हूँ")\n    }\n}
\n\n

OperationQueue की प्रमुख विशेषताएँ:

\n
    \n
  • qualityOfService (प्राथमिकता) सेट की जा सकती है।
  • \n
  • संचालन Operation ऑब्जेक्ट हो सकते हैं जिनमें main() विधि को ओवरराइड किया गया हो।
  • \n
  • स्थिति की निगरानी के लिए KVO (Key-Value Observing) का समर्थन करता है।
  • \n
\n\n

3. Timer — आवधिक और विलंबित कार्यों के लिए

\n

Timer (पहले NSTimer) का उपयोग निश्चित अंतराल पर कोड निष्पादित करने के लिए किया जाता है। महत्वपूर्ण: टाइमर काम करते हैं

अनुशंसाएँ