Ի՞նչ է կորուտին Kotlin-ում և ինչպես է աշխատում:
sobes.tech AI
Պատասխան AI-ից
Կորուտինն ի Kotlin — դա թեթև միավոր է, որը թույլ է տալիս գրել ասինխրոնային ոչ բլոկավոր կոդ ավելի ընթեռնելի և հաջորդական ձևով: Այն նման է հոսքին (thread), բայց շատ թեթև է և կարող է հեշտությամբ ստեղծվել մեծ քանակությամբ:
Հիմնական բաղադրիչներն ու աշխատանքային սկզբունքները:
- Suspend Functions (Suspendable Functions): Ֆունկցիաները, որոնք նշված են
suspendբանալի բառով, կարող են ժամանակավորապես դադարեցնել իրենց կատարմանը (suspend), առանց բլոկավորելու այն հոսքը, որտեղ նրանք կատարվում են: Երբ դադարեցված ֆունկցիան ավարտում է իր "սպասող" օպերացիան (օրինակ, ցանցային հարցում), այն կարող է վերականգնել կատարմանը այն վայրից, որտեղ դադարեցվել էր: - Context (Coroutine context): Էլեմենտների հավաքածու, որը կառավարում է կորուտինայի վարքը: Կոնտեքստում ներառված են՝
Job: Կորուտինայի նկարագրիչը, որը թույլ է տալիս կառավարել նրա կյանքի ցիկլը (չեղարկում, սպասում ավարտին)CoroutineDispatcher: Կորոշում է, թե որ հոսք(եր)ում կկատարվի կորուտինան: Ինքնուրույն փոխում է հոսքերը:CoroutineName: Ընտրովի անուն՝ դեբագի համարCoroutineExceptionHandler: Անբացառիկ արտահայտությունների մշակող
- Builders (Կառուցապատողներ): Ֆունկցիաներ, որոնք սկսում են կորուտինաների կատարմանը:
launch: Սկսում է նոր կորուտինա, առանց արդյունք վերադարձնելու: Վերադարձնում էJobasync: Սկսում է նոր կորուտինա, որը վերադարձնում է արդյունք (Deferred). Արդյունքը ստանալու համար օգտագործվում է.await()runBlocking: Բլոկավորող կառուցապատող, հիմնականում օգտագործվում է թեստավորման կամ բլոկավորող կոդի ինտեգրման համար:
Ինչպես է դա աշխատում տակավին:
Կորուտինաները չեն ստեղծում առանձին հոսքեր յուրաքանչյուր առաջադրանքի համար: Փոխարենը, երբ suspend ֆունկցիան դադարեցվում է, կոմպիլյատորը գեներացնում է կոդ, որը պահպանում է հաշվարկների ընթացիկ վիճակը: Երբ արդյունքը հասանելի է, կորուտինան վերականգնվում է CoroutineDispatcher-ի կառավարած հոսք(եր)ում: Սա հասնում է suspend ֆունկցիաները վերածելով ասինխրոնային կանչերի շարունակությունների (continuation-passing style), ինչը թույլ է տալիս մեկ հոսքին կատարել մի քանի կորուտինա, փոխելով դրանց միջև դադարեցման ժամանակ:
Օրինակ:
import kotlinx.coroutines.*
fun main() = runBlocking { // Բլոկավորում է ընթացիկ հոսքը մինչև կորուտինայի ավարտը
println("Առաջին")
launch { // Սկսում է նոր կորուտինա ֆոնային ռեժիմում
delay(1000L) // Անբլոկավոր դանդաղում 1 վայրկյան
println("Հետաձգումից հետո")
}
println("Հետո") // Այս տողը կիրականացվի մինչև launch կորուտինայի ավարտը
}
Այս կոդի ելքը կլինի:
Առաջին
Հետո
Հետաձգումից հետո
Սա ցույց է տալիս launch և delay-ի ոչ բլոկավոր բնույթը։