Sobes.tech
Middle

Kotlin параллел эсептөөлөр менен иштөө үчүн кайсы механизмдерди сунуштайт?

sobes.tech AI

AIден жооп

  • Корутины (Coroutines): Жеңіл салмақты ағындар, олар асинхронды кодты императивті стильде жазуға мүмкіндік береді, блоктайтын шақырулардан аулақ болу үшін. Қалпына келтірілетін функцияларға негізделген және табиғи ағындарға байланыссыз.
  • Dispatchers: Корутина орындалатын ағынды немесе ағындар пулын анықтайды:
    • Dispatchers.Default: Ресурсты көп талап ететін тапсырмалар үшін (мысалы, CPU-бағытталған)
    • Dispatchers.IO: I/O операциялары үшін (мысалы, желілік сұраулар, файлдармен жұмыс)
    • Dispatchers.Main: Android қосымшасында UI жаңартулар сияқты негізгі ағында орындалу үшін
    • Dispatchers.Unconfined: Корутина ағымдағы ағында орындалады, бірінші suspend-функцияға дейін
  • Suspend-функциялар: Кейін тоқтатылып, қайта жалғастырылуы мүмкін функциялар. suspend модификаторымен белгіленген.
  • Context: Корутина туралы ақпаратты қамтиды, мысалы, dispatcher, job және қателерді өңдеу.
  • Job: Корутина өмірлік циклін көрсетеді (басталды, белсенді, аяқталды, тоқтатылды). Оны басқаруға мүмкіндік береді (жою, аяқтау)
  • Scope: Корутина үшін көрінетін аймақты анықтайды, олардың өмірлік циклін басқарады.
  • MutableStateFlow / SharedFlow: kotlinx.coroutines.flow кітапханасында, корутиндер арасында қауіпсіз деректер алмасуға мүмкіндік береді.
  • Mutex: Синхрондау прimitives, ол критикалық бөлімдерді қорғайды.
import kotlinx.coroutines.*

fun main() = runBlocking {
    // Корутина мен dispatcher қолдану мысалы
    val job = launch(Dispatchers.Default) {
        repeat(5) { i ->
            println("Жұмыс істеп жатқан корутина: $i")
            delay(100) // Блоктамайтын кідіріс
        }
    }
    println("Корутина іске қосылды")
    job.join() // Корутина аяқталуын күтеміз
    println("Корутина аяқталды")
}
// Suspend-функцияның мысалы
suspend fun fetchData(): String {
    delay(1000) // Желілік сұрауды имитациялау
    return "Деректер алынды"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock

val mutex = Mutex()
var counter = 0

suspend fun incrementCounter() {
    mutex.withLock {
        counter++
    }
}