CodeBlanks Logo Icon CodeBlanks

Producer-consumer

Channel ile producer-consumer deseni öğrenirsin.

Producer-consumer ve Channel

Channel, coroutine'ler arası veri aktarır. Producer send ile yazar, consumer receive veya for ile okur. Bu, producer-consumer deseninin temelidir.

Örnek: val ch = Channel<Int>(3); ch.send(1); ch.close(). Consumer tarafta for (v in ch) println(v). Channel(3) 3 elemanlık buffer sağlar; close akışı sonlandırır. Bu kalıp, paralel üretim ve tüketim için kullanılır.

Buffered ve rendezvous channel

Channel() varsayılan olarak rendezvous'dur; send karşılıklı buluşmaya kadar bekler. Channel(n) n elemanlık buffer verir; send buffer dolana kadar bekler.

Örnek: Channel<Int>() rendezvous, Channel<Int>(3) 3 bufferlı. Buffered channel, producer'ın consumer'dan bağımsız çalışmasına izin verir. close() ile channel kapatılır; consumer döngüsü sonlanır.

Uygulama Channel ile üç değer üret

main fonksiyonunu runBlocking ile aç. val ch = Channel<Int>(3) oluştur; 1, 2, 3 gönder, close() çağır. for (v in ch) println(v) ile değerleri yazdır.

Başlangıç kodu

Main.kt
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.runBlocking

// main'i runBlocking ile aç
// üç bufferlı kanal oluştur, üç değer gönder, kapat, for ile yazdır

Örnek çözüm

Main.kt
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    val ch = Channel<Int>(3)
    ch.send(1)
    ch.send(2)
    ch.send(3)
    ch.close()
    for (v in ch) println(v)
}

Beklenen çıktı

1
2
3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Channel parçalarını eşle

Kavram Anlamı
Channel<Int>(3) Buffered channel
send(1) Üretim
close() Akış sonu
for (v in ch) Tüketim

2 Channel'i kapatmak ve akışı sonlandırmak için hangi metot kullanılır?

  • stop()
  • terminate()
  • end()
  • close() Doğru cevap

Açıklama: close() channel'ı kapatır ve tüketimi bitirir.

3 Channel tanımını tamamla

Soru
val ch = ____<Int>(3)
Cevap
val ch = Channel<Int>(3)

Açıklama: Channel<Int>(3) 3 bufferlı channel tanımlar.

İleri seviye bölümündeki tüm dersler