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 पुस्तकालय में भी
Go (Golang) में Event Bus और Observer पैटर्न: pub/sub की पूरी गाइड
Predis: PHP के लिए Redis क्लाइंट - इंस्टॉलेशन, कनेक्शन और उदाहरण
C++ में क्रिप्टोग्राफी: OpenSSL और Crypto++ के साथ एन्क्रिप्शन और हैश