Kotlin Academy · पाठ

Channel की मूल बातें: send, receive और close

Channels बनाएँ, values send और receive करें और उन्हें उचित रूप से close करें।

पाठ 1, कुल 4 में से13 चरण

Channel की मूल बातें: send, receive और close, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

चैनल क्या है

Channel कोरूटीन के बीच संचार के लिए एक कोरूटीन प्रिमिटिव है—यह ब्लॉक करने वाली कतार जैसा है, लेकिन सस्पेंड होता है। इसे एक पाइप की तरह समझें: एक ओर से भेजा जाता है और दूसरी ओर से प्राप्त किया जाता है।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val channel = Channel<Int>()
    launch {
        for (i in 1..5) channel.send(i)
        channel.close()
    }
    for (x in channel) println(x) // 1 2 3 4 5
}

send और receive

send(value) तब तक सस्पेंड रहता है जब तक प्राप्तकर्ता तैयार न हो जाए। receive() तब तक सस्पेंड रहता है जब तक कोई मान उपलब्ध न हो जाए।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val ch = Channel<String>()
    launch {
        ch.send("ping")
        println("sent")
    }
    val msg = ch.receive()
    println("received: $msg")
}

चैनल बंद करना

channel.close() संकेत देता है कि अब कोई और मान नहीं भेजा जाएगा। प्राप्तकर्ताओं को बफ़र में बचे मान मिलते हैं, फिर for-लूप समाप्त हो जाता है।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val ch = Channel<Int>(3)
    launch {
        repeat(3) { ch.send(it) }
        ch.close()  // signal done
    }
    for (v in ch) println(v) // 0 1 2, then loop ends
    println("Channel consumed")
}

isClosedForSend / isClosedForReceive

isClosedForSend (अब कोई और प्रेषण अनुमत नहीं) और isClosedForReceive (सभी मान उपयोग किए जा चुके हैं) से चैनल की स्थिति जाँचें।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val ch = Channel<Int>()
    launch {
        ch.send(1)
        ch.close()
    }
    println(ch.receive())
    println("isClosedForReceive: ${ch.isClosedForReceive}")
}

उत्पादक बिल्डर

produce { } एक कोरूटीन बिल्डर है जो उत्पादक कोरूटीन बनाता है और ReceiveChannel लौटाता है। ब्लॉक समाप्त होने पर चैनल अपने-आप बंद हो जाता है।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun CoroutineScope.squares(n: Int) = produce<Int> {
    for (i in 1..n) send(i * i)
}
fun main() = runBlocking {
    val sq = squares(5)
    for (v in sq) println(v) // 1 4 9 16 25
}

consumeEach एक्सटेंशन

consumeEach { } चैनल पर पुनरावृत्ति करता है और ब्लॉक में अपवाद आने पर उसे रद्द कर देता है, जिससे रिसाव रोका जाता है।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val ch = produce<String> {
        send("a"); send("b"); send("c")
    }
    ch.consumeEach { println(it) }
}

tryReceive और trySend

सस्पेंड न होने वाले विकल्प: trySend और tryReceive बिना सस्पेंड हुए तुरंत ChannelResult लौटाते हैं।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val ch = Channel<Int>(1)
    val sendResult = ch.trySend(42)
    println("Sent: ${sendResult.isSuccess}")
    val recvResult = ch.tryReceive()
    println("Got: ${recvResult.getOrNull()}")
}

एक से अनेक: कई उपभोक्ता

कई कोरूटीन एक ही चैनल से प्राप्त कर सकती हैं और काम बाँट सकती हैं—इसे एक से अनेक प्रतिरूप कहते हैं।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val tasks = produce { repeat(6) { send(it) } }
    repeat(3) { worker ->
        launch {
            for (task in tasks) {
                println("Worker $worker: task $task")
            }
        }
    }
}

अनेक से एक: कई उत्पादक

कई कोरूटीन एक ही चैनल पर भेज सकती हैं और अपने आउटपुट को मिला सकती हैं—इसे अनेक से एक प्रतिरूप कहते हैं।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking {
    val results = Channel<String>()
    repeat(3) { i ->
        launch { results.send("result-$i") }
    }
    launch {
        repeat(3) { println(results.receive()) }
        results.close()
    }
}

पाइपलाइन प्रतिरूप

चैनलों को एक डेटा-प्रसंस्करण श्रृंखला में जोड़ें, जहाँ प्रत्येक चरण एक चैनल से पढ़ता है और दूसरे में लिखता है—डेटा प्रसंस्करण कार्यप्रवाहों के लिए यह बहुत उपयोगी है।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun CoroutineScope.numbers() = produce { for (i in 1..5) send(i) }
fun CoroutineScope.doubled(input: ReceiveChannel<Int>) = produce { for (v in input) send(v * 2) }
fun main() = runBlocking {
    val nums = numbers()
    val doubled = doubled(nums)
    for (v in doubled) println(v) // 2 4 6 8 10
    coroutineContext.cancelChildren()
}

चैनल और फ़्लो

चैनल सक्रिय और स्थिति-संपन्न होते हैं—वे उपभोग से स्वतंत्र रूप से मौजूद रहते हैं। फ़्लो निष्क्रिय और घोषणात्मक होते हैं—हर संग्रहण पर फिर से शुरू होते हैं। डेटा धाराओं के लिए फ़्लो को प्राथमिकता दें; उत्पादक-उपभोक्ता संचार के लिए चैनल का उपयोग करें।

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
import kotlinx.coroutines.flow.*
// Flow (cold): each collect() re-runs the block
// Channel (hot): shared; multiple receivers share the same stream
fun main() = runBlocking { println("Flow = cold; Channel = hot") }

त्वरित जाँच

जब आप channel.close() कॉल करते हैं, तो क्या होता है?

पुनरावलोकन

send और receive तब तक सस्पेंड रहते हैं जब तक दूसरी ओर तैयार न हो। close() पूर्णता का संकेत देता है। अपने-आप बंद होने वाले उत्पादकों के लिए उत्पादक, सुरक्षित पुनरावृत्ति के लिए consumeEach, और एक से अनेक/अनेक से एक प्रतिरूपों के लिए चैनलों का उपयोग करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Channel की मूल बातें: send, receive और close” पाठ निःशुल्क है?

हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Channel की मूल बातें: send, receive और close” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Channel की मूल बातें: send, receive और close” में मैं क्या सीखूँगा?

Channels बनाएँ, values send और receive करें और उन्हें उचित रूप से close करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Channel की मूल बातें: send, receive और close” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Channel की मूल बातें: send, receive और close
  2. Channel के प्रकार: Rendezvous, Buffered, Conflated, Unlimited
  3. Shared State के लिए Mutex और Semaphore
  4. Actors और Structured State Management
← Kotlin Academy पर वापस जाएँ