स्विफ्ट में कार्य कतारें: GCD, OperationQueue और Swift Concurrency

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

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

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

स्विफ्ट में कार्य कतारें: GCD से Swift Concurrency तक

\n\n

iOS और macOS के विकास में, कोड के समानांतर निष्पादन का प्रबंधन एक प्रमुख कार्य है। कार्य कतारें (queues) उपयोगकर्ता इंटरफ़ेस को ब्लॉक किए बिना, थ्रेड्स के बीच लोड को कुशलतापूर्वक वितरित करने की अनुमति देती हैं। इस गाइड में, हम तीन मुख्य दृष्टिकोणों पर चर्चा करेंगे: क्लासिक Grand Central Dispatch (GCD), एब्स्ट्रैक्शन OperationQueue, और आधुनिक तंत्र Swift Concurrency (async/await)।

\n\n

1. Grand Central Dispatch (GCD) — समानांतरता का आधार

\n\n

GCD एक निम्न-स्तरीय C लाइब्रेरी है, जो स्विफ्ट में एकीकृत है। यह थ्रेड पूल का प्रबंधन करती है और दो प्रकार की कतारें प्रदान करती है:

\n\n
    \n
  • Serial (अनुक्रमिक) — कार्य जोड़ने के क्रम में एक के बाद एक निष्पादित होते हैं।
  • \n
  • Concurrent (समानांतर) — कार्य एक साथ शुरू होते हैं, पूर्ण होने का क्रम गारंटीकृत नहीं है।
  • \n
\n\n

कतार बनाने और उपयोग करने का उदाहरण:

\n\n
import Foundation\n\n// एक अनुक्रमिक कतार बनाएँ\nlet serialQueue = DispatchQueue(label: "com.example.serial")\n\nserialQueue.async {\n    print("कार्य 1 शुरू हुआ")\n    sleep(1)\n    print("कार्य 1 पूर्ण हुआ")\n}\n\nserialQueue.async {\n    print("कार्य 2 शुरू हुआ")\n    sleep(1)\n    print("कार्य 2 पूर्ण हुआ")\n}\n\n// समानांतर कतार\nlet concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)\n\nconcurrentQueue.async {\n    print("समानांतर कार्य A")\n}\n\nconcurrentQueue.async {\n    print("समानांतर कार्य B")\n}
\n\n

GCD की प्रमुख क्षमताएँ:

\n
    \n
  • DispatchQueue.main — मुख्य कतार (UI थ्रेड)।
  • \n
  • DispatchQueue.global(qos: .userInitiated) — प्राथमिकता (QoS) के साथ वैश्विक कतारें।
  • \n
  • dispatchGroup — कई कार्यों का सिंक्रनाइज़ेशन।
  • \n
  • dispatchSemaphore — संसाधनों तक पहुँच का नियंत्रण।
  • \n
\n\n

2. OperationQueue — ऑब्जेक्ट-ओरिएंटेड एब्स्ट्रैक्शन

\n\n

OperationQueue GCD के ऊपर बनाई गई है, लेकिन एक उच्च-स्तरीय API प्रदान करती है। मुख्य लाभ:

\n\n
    \n
  • संचालनों के बीच निर्भरता का प्रबंधन।
  • \n
  • कार्यों को रद्द करना (cancel)।
  • \n
  • स्थिति की निगरानी (isFinished, isExecuting)।
  • \n
  • समानांतर संचालनों की अधिकतम संख्या।
  • \n
\n\n

BlockOperation के साथ उदाहरण:

\n\n
import Foundation\n\nlet operationQueue = OperationQueue()\noperationQueue.maxConcurrentOperationCount = 2\n\nlet operation1 = BlockOperation {\n    print("संचालन 1: डेटा लोड हो रहा है")\n    sleep(2)\n    print("संचालन 1 पूर्ण हुआ")\n}\n\nlet operation2 = BlockOperation {\n    print("संचालन 2: प्रसंस्करण")\n    sleep(1)\n    print("संचालन 2 पूर्ण हुआ")\n}\n\n// निर्भरता सेट करें: संचालन 2, संचालन 1 के पूर्ण होने के बाद ही शुरू होगा\noperation2.addDependency(operation1)\n\noperationQueue.addOperations([operation1, operation2], waitUntilFinished: false)\n\n// संचालन रद्द करना\noperation1.cancel()
\n\n

OperationQueue का उपयोग कब करें:

\n
    \n
  • निर्भरताओं के साथ जटिल कार्य श्रृंखलाएँ।
  • \n
  • सूक्ष्म नियंत्रण की आवश्यकता (रोकना, रद्द करना)।
  • \n
  • निगरानी के लिए KVO (Key-Value Observing) के साथ कार्य।
  • \n
\n\n

3. Swift Concurrency — आधुनिक दृष्टिकोण (iOS 13+, macOS 10.15+)

\n\n

Swift 5.5 से शुरू करके, Apple ने async/await, Task और TaskGroup के माध्यम से एसिंक्रोनस प्रोग्रामिंग के लिए अंतर्निहित समर्थन प्रस्तुत किया। यह समानांतरता के साथ काम करने का अधिक सुरक्षित और पठनीय तरीका है।

\n\n

मूल उदाहरण:

\n\n
import Foundation\n\nfunc fetchUserData() async -> String {\n    // नेटवर्क अनुरोध का अनुकरण\n    try? await Task.sleep(nanoseconds: 2 * 1_000_000_000)\n    return "User data loaded"\n}\n\nfunc processData()                    

अनुशंसाएँ