Kotlin में एसिंक्रोनस प्रोग्रामिंग का परिचय
आधुनिक एप्लिकेशन उच्च प्रदर्शन और प्रतिक्रियाशीलता की मांग करते हैं। एसिंक्रोनस प्रोग्रामिंग मुख्य निष्पादन थ्रेड को ब्लॉक किए बिना लंबी अवधि के संचालन (नेटवर्क अनुरोध, फ़ाइल पढ़ना, डेटाबेस के साथ काम करना) करने की अनुमति देता है। Kotlin में इसके लिए एक शक्तिशाली और सुरुचिपूर्ण तंत्र का उपयोग किया जाता है — कोरूटीन (coroutines)।
पारंपरिक थ्रेड (threads) के विपरीत, कोरूटीन हल्के होते हैं, भाषा स्तर पर प्रबंधित होते हैं और भारी सिस्टम संसाधनों की आवश्यकता नहीं होती है। यह उन्हें एसिंक्रोनस कोड लिखने के लिए एक आदर्श उपकरण बनाता है जिसे पढ़ना और बनाए रखना आसान है। इस गाइड में, हम Kotlin में एसिंक्रोनस प्रोग्रामिंग की बुनियादी अवधारणाओं को शुरू से समझेंगे।
1. कोरूटीन की मूल बातें: यह क्या है और यह कैसे काम करता है?
कोरूटीन एक निलंबित (suspendable) गणना संचालन का एक उदाहरण है। इसे कोड के एक बिंदु पर रोका जा सकता है और दूसरे पर फिर से शुरू किया जा सकता है, बिना थ्रेड को ब्लॉक किए। कोरूटीन के साथ काम करने के लिए, लाइब्रेरी kotlinx.coroutines को कनेक्ट करना आवश्यक है।
निर्भरता जोड़ना
फ़ाइल build.gradle.kts में जोड़ें:
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")}पहला कोरूटीन
कोरूटीन शुरू करने के लिए बिल्डर launch का उपयोग किया जाता है। यह बैकग्राउंड में एक नया कोरूटीन शुरू करता है।
import kotlinx.coroutines.*
fun main() = runBlocking { // runBlocking कोरूटीन की प्रतीक्षा करने के लिए मुख्य थ्रेड को ब्लॉक करता है println("शुरुआत: ${Thread.currentThread().name}")
launch { // नया कोरूटीन शुरू करना delay(1000L) // 1 सेकंड के लिए रोकें (थ्रेड को ब्लॉक नहीं करता!) println("कोरूटीन: ${Thread.currentThread().name}") }
println("अंत: ${Thread.currentThread().name}")}आउटपुट:
शुरुआत: mainअंत: mainकोरूटीन: mainध्यान दें: delay एक suspend-फ़ंक्शन है जो कोरूटीन को रोकता है, लेकिन थ्रेड को ब्लॉक नहीं करता है। जब कोरूटीन "सोता" है, तो थ्रेड अन्य कोड निष्पादित कर सकता है।
2. Suspend-फ़ंक्शन: एसिंक्रोनसिटी के बिल्डिंग ब्लॉक
Suspend-फ़ंक्शन एक ऐसा फ़ंक्शन है जिसे रोका जा सकता है और बाद में फिर से शुरू किया जा सकता है। ऐसे फ़ंक्शन को केवल अन्य suspend-फ़ंक्शन या कोरूटीन से ही कॉल किया जा सकता है। उन्हें कीवर्ड suspend से चिह्नित किया जाता है।
Suspend-फ़ंक्शन का उदाहरण
import kotlinx.coroutines.*
suspend fun fetchData(): String { delay(2000L) // लंबे नेटवर्क अनुरोध का अनुकरण return "डेटा प्राप्त हुआ"}
fun main() = runBlocking { println("डेटा का अनुरोध...") val result = fetchData() // कोरूटीन से suspend-फ़ंक्शन कॉल करना println(result)}async/await के साथ समानांतर निष्पादन
यदि आपको कई कार्यों को समानांतर में निष्पादित करने की आवश्यकता है, तो बिल्डर async का उपयोग करें। यह Deferred लौटाता है — एक ऑब्जेक्ट जो भविष्य के परिणाम को संग्रहीत करता है। परिणाम await() के साथ प्राप्त किया जा सकता है।
import kotlinx.coroutines.*
suspend fun loadUser(): String { delay(1000L) return "उपयोगकर्ता: इवान"}
suspend fun loadPosts(): String { delay(1500L) return "पोस्ट: समाचार, लेख"}
fun main() = runBlocking { val time = measureTimeMillis { val userDeferred = async { loadUser() } val postsDeferred = async { loadPosts() }
println(userDeferred.await()) println(postsDeferred.await()) } println("कुल समय: $time मि.से.") // ~1500 मि.से. (दोनों में से अधिकतम समय)}async के बिना, कार्य क्रमिक रूप से निष्पादित होते और ~2500 मि.से. लगते। समानांतर निष्पादन ने समय घटाकर ~1500 मि.से. कर दिया।
3. Dispatchers: थ्रेड प्रबंधन
Dispatcher यह निर्धारित करता है कि कोरूटीन किस थ्रेड या थ्रेड पूल पर निष्पादित होगा।