Swift में कार्य कतारें: GCD, OperationQueue और Combine iOS/macOS के लिए

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

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

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

Swift (iOS/macOS) के लिए कार्य कतारें: पूरी गाइड



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



1. Grand Central Dispatch (GCD) — मल्टीथ्रेडिंग का आधार



GCD कोड के समानांतर निष्पादन को प्रबंधित करने के लिए Apple की निम्न-स्तरीय लाइब्रेरी है। मुख्य तत्व DispatchQueue है, जो अनुक्रमिक (serial) या समानांतर (concurrent) हो सकता है।



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

  • main — मुख्य कतार (UI थ्रेड)। सभी इंटरफ़ेस अपडेट इसी पर किए जाने चाहिए।
  • global — विभिन्न प्राथमिकताओं (background, utility, default, userInitiated, userInteractive) वाली सिस्टम समानांतर कतारें।
  • custom — उपयोगकर्ता द्वारा DispatchQueue(label:attributes:) के माध्यम से बनाई गई कस्टम कतारें।


उदाहरण: बैकग्राउंड में इमेज लोड करना

import UIKit

class ImageLoader { func loadImage(from url: URL, completion: @escaping (UIImage?) -> Void) { DispatchQueue.global(qos: .background).async { guard let data = try? Data(contentsOf: url), let image = UIImage(data: data) else { DispatchQueue.main.async { completion(nil) } return } DispatchQueue.main.async { completion(image) } } }}


2. OperationQueue — कार्यों का लचीला प्रबंधन



OperationQueue GCD के ऊपर एक उच्च-स्तरीय एब्स्ट्रैक्शन है। यह ऑपरेशनों के बीच निर्भरताएँ बनाने, समानांतर कार्यों की अधिकतम संख्या निर्धारित करने और ऑपरेशनों को रद्द करने की अनुमति देता है।



मुख्य क्षमताएँ:

  • BlockOperation या Operation के कस्टम सबक्लास बनाना।
  • निर्भरताएँ सेट करना: operation2.addDependency(operation1)।
  • सभी ऑपरेशन रद्द करना: queue.cancelAllOperations()।
  • सेवा गुणवत्ता (quality of service) का नियंत्रण।


उदाहरण: फ़ाइलों का अनुक्रमिक डाउनलोड

import Foundation

let queue = OperationQueue()queue.maxConcurrentOperationCount = 1 // अनुक्रमिक निष्पादन

let fetchMetadata = BlockOperation { print("मेटाडेटा लोड हो रहा है...") Thread.sleep(forTimeInterval: 1)}

let downloadContent = BlockOperation { print("कंटेंट डाउनलोड हो रहा है...") Thread.sleep(forTimeInterval: 2)}

downloadContent.addDependency(fetchMetadata)

queue.addOperations([fetchMetadata, downloadContent], waitUntilFinished: false)print("ऑपरेशन कतार में डाल दिए गए")


3. Swift Concurrency (async/await) — आधुनिक दृष्टिकोण



Swift 5.5 से शुरू करते हुए, Apple ने async और await कीवर्ड के साथ एक अंतर्निहित एसिंक्रोनस मॉडल पेश किया। यह क्लोजर और कॉलबैक के बिना, एसिंक्रोनस कोड को रैखिक रूप से लिखने की अनुमति देता है।



मुख्य घटक:

  • async — एसिंक्रोनस फ़ंक्शन को चिह्नित करना।
  • await — एसिंक्रोनस ऑपरेशन के परिणाम की प्रतीक्षा करना।
  • Task — एसिंक्रोनस संदर्भ बनाना।
  • TaskGroup — समानांतर कार्यों का समूह बनाना।


उदाहरण: समानांतर डेटा लोडिंग

import Foundation

func fetchUser(id: Int) async -> String { // नेटवर्क अनुरोध का अनुकरण try? await Task.sleep(nanoseconds: 1_000_000_000) return "User_\\(id)"}

func loadAllUsers() async { await withTaskGroup(of: String

अनुशंसाएँ