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як ҷараёни "гарм" барои паҳн кардани маълумот мебошад.