Kotlin में एसिंक्रोनस प्रोग्रामिंग का परिचय
आधुनिक एप्लिकेशन उच्च प्रदर्शन और प्रतिक्रियाशीलता की मांग करते हैं। Kotlin में एसिंक्रोनस प्रोग्रामिंग एक शक्तिशाली उपकरण है जो सिस्टम संसाधनों का कुशलतापूर्वक उपयोग करते हुए नॉन-ब्लॉकिंग कोड लिखने की अनुमति देता है। पारंपरिक मल्टीथ्रेडिंग के विपरीत, Kotlin कोरूटीन हल्के निष्पादन थ्रेड प्रदान करते हैं जो मुख्य थ्रेड को ब्लॉक किए बिना रुक और फिर से शुरू हो सकते हैं।
इस गाइड में, हम Kotlin में एसिंक्रोनस प्रोग्रामिंग की प्रमुख अवधारणाओं को समझेंगे: बुनियादी कोरूटीन से लेकर Flow और Channel का उपयोग करके उन्नत पैटर्न तक। आप तेज़ और विश्वसनीय रूप से काम करने वाले कुशल एसिंक्रोनस एप्लिकेशन बनाना सीखेंगे।
Kotlin में कोरूटीन के मूल सिद्धांत
कोरूटीन क्या है?
कोरूटीन (coroutine) एक हल्का निष्पादन थ्रेड है जिसे एक बिंदु पर रोका जा सकता है और दूसरे पर फिर से शुरू किया जा सकता है। Kotlin में, कोरूटीन को भाषा स्तर पर suspend कीवर्ड और विशेष बिल्डरों के माध्यम से कार्यान्वित किया जाता है।
पहली कोरूटीन चलाना
कोरूटीन के साथ काम करने के लिए, build.gradle.kts में निर्भरता जोड़ना आवश्यक है:
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")}कोरूटीन चलाने का मूल उदाहरण:
import kotlinx.coroutines.*
fun main() = runBlocking { launch { delay(1000L) println("दुनिया!") } println("नमस्ते,")}निष्पादन परिणाम:
नमस्ते,दुनिया!Suspend-फ़ंक्शन
Suspend-फ़ंक्शन वे फ़ंक्शन हैं जो थ्रेड को ब्लॉक किए बिना कोरूटीन के निष्पादन को रोक सकते हैं। उन्हें suspend कीवर्ड से चिह्नित किया जाता है:
suspend fun fetchUserData(): String { delay(2000L) // नेटवर्क अनुरोध का अनुकरण return "उपयोगकर्ता डेटा"}
fun main() = runBlocking { val data = fetchUserData() println(data)}कोरूटीन प्रबंधन: Scope और Dispatchers
CoroutineScope
CoroutineScope कोरूटीन के जीवनचक्र को परिभाषित करता है। सभी कोरूटीन एक विशिष्ट स्कोप के अंदर चलाए जाते हैं। यदि स्कोप रद्द कर दिया जाता है, तो उसकी सभी चाइल्ड कोरूटीन भी रद्द हो जाती हैं।
class MyViewModel : ViewModel() { private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob()) fun loadData() { scope.launch { val data = fetchData() updateUI(data) } } override fun onCleared() { super.onCleared() scope.cancel() }}Dispatchers: निष्पादन थ्रेड का चयन
Dispatchers यह निर्धारित करते हैं कि कोरूटीन किस थ्रेड पूल पर निष्पादित होगी। मुख्य प्रकार:
Dispatchers.Main— UI थ्रेड के लिए (Android, JavaFX)Dispatchers.IO— इनपुट-आउटपुट संचालन के लिए (नेटवर्क, फ़ाइलें)Dispatchers.Default— CPU-गहन कार्यों के लिएDispatchers.Unconfined— किसी विशिष्ट थ्रेड से बंधा नहीं
fun main() = runBlocking { launch(Dispatchers.IO) { println("IO पर निष्पादित: ${Thread.currentThread().name}") } launch(Dispatchers.Default) { println("Default पर निष्पादित: ${Thread.currentThread().name}") }}उन्नत तकनीकें: async/await और कोरूटीन रद्द करना
async के साथ समानांतर निष्पादन
async बिल्डर कई कार्यों को समानांतर में चलाने और await() के माध्यम से परिणाम प्राप्त करने की अनुमति देता है:
suspend fun fetchDataFromApi1(): String { delay(1000L) return "API 1 परिणाम"}
suspend fun fetchDataFromApi2(): String { delay(1500L) return "API 2 परिणाम"}
fun main() = runBlocking { val time = measureTimeMillis { val result1 = async { fetchDataFromApi1() } val
```