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: Корутина куруучу функция, ал учурдагы агымды блоктоп, корутинанын аякташын күтөт. Блоктогон жана блоктогон эмес кодду бириктирүү үчүн колдонулат, көбүнчө тесттерде же main-функцияларында: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— кеңири таратуу үчүн "жылуулук" агым.