Swift में समवर्तीता और मल्टीथ्रेडिंग: एक संपूर्ण गाइड

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

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

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

Swift में समवर्तीता और मल्टीथ्रेडिंग का परिचय

\n\n

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

\n\n

इस लेख में, हम Swift में थ्रेड्स के साथ काम करने के सभी मुख्य दृष्टिकोणों पर चर्चा करेंगे: बुनियादी अवधारणाओं से लेकर उन्नत तकनीकों तक। आप सीखेंगे कि race conditions, deadlocks और मल्टीथ्रेडेड प्रोग्रामिंग की अन्य सामान्य समस्याओं से कैसे बचा जाए।

\n\n

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

\n\n

Grand Central Dispatch (GCD) कोड के समानांतर निष्पादन को प्रबंधित करने के लिए Apple की एक निम्न-स्तरीय लाइब्रेरी है। यह थ्रेड्स पर कार्यों को वितरित करने के लिए कतारों (dispatch queues) का उपयोग करती है।

\n\n

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

\n\n

GCD में दो मुख्य प्रकार की कतारें होती हैं:

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

GCD के साथ उदाहरण

\n\n
import Foundation\n\n// एक अनुक्रमिक कतार बनाएं\nlet serialQueue = DispatchQueue(label: "com.example.serial")\n\n// एक समानांतर कतार बनाएं\nlet concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)\n\n// अतुल्यकालिक निष्पादन\nserialQueue.async {\n    print("कार्य 1 पृष्ठभूमि में निष्पादित हो रहा है")\n}\n\n// तुल्यकालिक निष्पादन (वर्तमान थ्रेड को ब्लॉक करता है)\nserialQueue.sync {\n    print("कार्य 2 तुल्यकालिक रूप से निष्पादित हो रहा है")\n}\n\n// मुख्य थ्रेड के साथ कार्य\nDispatchQueue.main.async {\n    print("मुख्य थ्रेड पर UI अपडेट करें")\n}\n\n// निष्पादन में विलंब\nDispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {\n    print("2 सेकंड के बाद निष्पादित")\n}
\n\n

Dispatch Group — कार्यों के समूह का सिंक्रोनाइज़ेशन

\n\n

Dispatch Group आपको अतुल्यकालिक कार्यों के एक समूह के पूरा होने को ट्रैक करने और उनके समाप्त होने के बाद कोड निष्पादित करने की अनुमति देता है।

\n\n
let group = DispatchGroup()\nlet queue = DispatchQueue.global(qos: .background)\n\nfor i in 1...5 {\n    queue.async(group: group) {\n        print("कार्य \\(i) शुरू हुआ")\n        Thread.sleep(forTimeInterval: Double.random(in: 0.5...2.0))\n        print("कार्य \\(i) पूरा हुआ")\n    }\n}\n\ngroup.notify(queue: DispatchQueue.main) {\n    print("सभी कार्य पूरे हो गए! UI अपडेट करें।")\n}
\n\n

Swift 5.5+ में आधुनिक async/await

\n\n

Swift 5.5 से शुरू करके, Apple ने async और await कीवर्ड पर आधारित एक नया समवर्तीता मॉडल पेश किया। यह अतुल्यकालिक कोड को अधिक पठनीय और समझने योग्य बनाता है।

\n\n

अतुल्यकालिक फ़ंक्शन परिभाषित करना

\n\n

अतुल्यकालिक फ़ंक्शन को async कीवर्ड से चिह्नित किया जाता है, और उनके कॉल के लिए await की आवश्यकता होती है:

\n\n
import Foundation\n\n// डेटा लोड करने का अतुल्यकालिक फ़ंक्शन\nfunc fetchUserData() async throws -> String {\n    let url = URL(string: "https://api.example.com/user")!\n    let (data, _) = try await URLSession.shared.data(from: url)\n    return String(data: data, encoding: .utf8) ?? "कोई डेटा नहीं"\n}\n\n// async/await का उपयोग\nfunc loadUserProfile() async {\n    do {\n        let userData = try await fetchUserData()\n        await MainActor.run {\n            print("उपयोगकर्ता डेटा: \\(userData)")\n        }\n    } catch {\n        print("लोड करने में त्रुटि: \\(error)")\n    }\n}\n\n// अतुल्यकालिक कार्य शुरू करना\nTask {\n    await loadUserProfile()\n}
\n\n

Async let — समानांतर निष्पादन

\n\n

async let कीवर्ड आपको कई अतुल्यकालिक कार्यों को समानांतर रूप से चलाने की अनुमति देता है:

\n\n
<                

ब्लॉग

पुस्तक अनुशंसाएँ