Sobes.tech
Middle

Кодомҳои бисёрсоҳавии Kotlin кадомҳоянд?

sobes.tech AI

Ҷавоб аз AI

Котон пешниҳод мекунад, ки зерини унсурҳои бисёрсоҳавӣ:

  • Корутинҳо: Нишонҳои сабук, ки ба функсияҳои боздошташаванда асос ёфтаанд. Воҳидсозии иҷрои асинхронӣ ва беистифодабариро таъмин мекунанд.
  • Сохтмонҳои корутин: Функсияҳое, ки корутинҳоро оғоз мекунанд. Аслӣ: launch (корутинро бе баргардонидани арзиш оғоз мекунад), async (корутинро оғоз мекунад ва Deferred баргардон мекунад, ки метавон интизор шуд барои гирифтани натиҷа).
    // Намунаи истифодаи launch
    GlobalScope.launch {
        println("Салом аз корутин ${Thread.currentThread().name}")
    }
    
    // Намунаи истифодаи async
    val deferred = GlobalScope.async {
        delay(1000) // Имитацияи амали дароз
        "Натиҷа"
    }
    val result = runBlocking { deferred.await() } // интизор шудан барои натиҷа
    
  • Dispatchers: Муайян мекунанд, ки корутин дар кадом пули сӯзанҳо иҷро шавад. Аслӣ:
    • Dispatchers.Default: Пули умумии сӯзанҳо барои вазифаҳои CPU-сангин.
    • Dispatchers.IO: Пули сӯзанҳо барои амалиётҳои блоккунии воридотӣ-баромадӣ.
    • Dispatchers.Main: Диспетчер барои сӯзани интерфейси корбар дар платформаҳои мувофиқ (Android, Swing).
    • Dispatchers.Unconfined: Корутин дар сӯзани ҳозира оғоз мешавад, аммо метавонад дар ҳар сӯзан идома ёбад.
    GlobalScope.launch(Dispatchers.IO) {
        // иҷрои воридотӣ-баромадӣ
    }
    
  • runBlocking: Функсияи сохтани корутин, ки сӯзанро то анҷоми корутин мебандад. Барои пайваст кардани коди блоккунӣ ва бе блоккунӣ, аксар вақт дар тестҳо ё функсияҳои асосӣ истифода мешавад.
    runBlocking {
        launch {
            delay(500)
            println("Баъд аз ${Thread.currentThread().name} анҷом ёфт")
        }
        println("Дар ${Thread.currentThread().name} оғоз ёфт")
    }
    
  • suspend функсияҳо: Функсияҳое, ки иҷрои онҳо метавонад боздошта шавад ва такрор шавад. Мегузаранд танҳо аз дигар suspend функсияҳо ё сохторҳои корутин.
    suspend fun doSomething() {
        delay(100) // Намунаи боздоштан
    }
    
  • Job: Ҳолдери корутин, ки корутинро идора мекунад. Методҳо барои идоракунии ҳаёти корутин (боздоштан, интизор шудан барои анҷом ёфтани).
    val job = GlobalScope.launch {
       // Амали дароз
    }
    job.cancel() // Боздошти корутин
    runBlocking { job.join() } // Интизори анҷом
    
  • CoroutineScope: Маънои доираи корутинро муайян мекунад. Корутинҳое, ки дар доираи муайян оғоз мешаванд, автоматӣ бо қатъ кардани доираи он қатъ мешаванд. Ҳамоҳангсозии ҳаёти корутинро кӯмак мекунад.
    val scope = CoroutineScope(Dispatchers.Default)
    scope.launch {
        // Корутин дар ин доира
    }
    scope.cancel() // Баъд аз қатъ кардани ҳамаи корутинҳо дар ин доира
    
  • Каналҳо (Channel): Примитивҳо барои интиқоли бехатари маълумот байни корутинҳо. Каналҳо метавонанд яктарафа (фақат барои фиристодан ё қабул кардан) ё дутарафа бошанд.
    import kotlinx.coroutines.channels.Channel
    
    val channel = Channel<Int>()
    
    runBlocking {
        launch {
            for (x in 1..5) channel.send(x * x)
            channel.close() // Муҳим аст, ки каналро баста бошед
        }
        launch {
            for (y in channel) println(y)
        }
    }
    
  • Мютекси (Mutex): Примитивҳо барои ҳамоҳангсозӣ барои таъмини дастрасии эксклюзив ба манбаи умумӣ. Ҳамоҳангсозӣ дар сӯзанҳоро таъмин мекунанд, танҳо як корутин метавонад дар як вақт мютексиро дошта бошад.
    import kotlinx.coroutines.sync.Mutex
    import kotlinx.coroutines.sync.withLock
    
    val mutex = Mutex()
    var counter = 0
    
    suspend fun incrementCounter() {
        mutex.withLock {
            counter++
        }
    }
    
  • Ҳолатҳо (StateFlow, SharedFlow): Примитивҳо барои кор бо ҷараёнҳои маълумот дар контексти барқарорсозӣ ва бисёрсоҳавӣ. StateFlow як ҷараёни "сард" бо ҳолати ҳозира аст, ва SharedFlow як ҷараёни "гарм" барои паҳн кардани маълумот мебошад.