
рдХреЛрдЯрд▓реАрди , рдХреЛрдЯрд▓рд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╢рд╛рдирджрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рд▓рд┐рдпрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЛ Corutins рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рд╣реИред рдмрд╕ рдкрдврд╝рддреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ рдЖрдк рд╕рдлрд▓ рд╣реЛрдВрдЧреЗред
рдЖрдЗрдП Corutin рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред
Coroutines рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕, рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред
рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдЬреЛ рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд░рд╛рдЙрдЯрдЗрди рдХреИрд╕реЗ рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ?
Coroutines рд╣рд▓реНрдХреЗ рдкреНрд░рд╡рд╛рд╣ рд╣реИрдВред рдПрдХ рд╣рд▓реНрдХреЗ рдзрд╛рдЧреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рджреЗрд╢реА рдзрд╛рдЧреЗ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреЗрдЬ рд╣реИред
рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, "рджреЗрд╢реА рдзрд╛рдЧреЗ рд╕реЗ рдЬреБрдбрд╝реА рдирд╣реАрдВ" ?
рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрд░рд╛рдЯреАрди рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдХреЛрд░реБрдЯрд┐рди рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:
- рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
- рдЧреИрд░-рдЙрдкрдпреЛрдЧ рдвреЗрд░;
рдХреЛрдЯрд▓рд┐рди рдПрдХ рд╕реНрдЯреИрдХ рдХреЗ рдмрд┐рдирд╛ рдХреЛрд░рд╛рдЯрд╛рдЗрдиреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЙрд░рдЯрд╛рдЗрдиреНрд╕ рдХрд╛ рдЕрдкрдирд╛ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдореВрд▓ рдзрд╛рдЧреЗ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВред
рджреЛрдиреЛрдВ Coroutines рдФрд░ рдзрд╛рд░рд╛рдПрдБ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдУрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХреЙрд░рдЖрдЙрдЯреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдм рдЖрдк рд╕рдЪреЗрдд рд░реВрдк рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреЛрдЯрд▓рд┐рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдЕрдВрд╢ рдкрдврд╝ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ:
Coroutines рдХреЛ рдПрдХ рд╕реБрдЧрдо рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдереНрд░реЗрдбреНрд╕ рдХреА рддрд░рд╣, рдХреЛрд░рдЯрд╛рдЗрди рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд░рдЯрд╛рдЗрди рдмрд╣реБрдд рд╕рд╕реНрддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рдореБрдлреНрдд рд╣реИрдВ: рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣рдЬрд╛рд░реЛрдВ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзрд╛рд░рд╛рдПрдБ рдорд╣рдВрдЧреА рд╣реИрдВред рдЖрдзреБрдирд┐рдХ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╣рдЬрд╛рд░ рдзрд╛рдЧреЗ рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ
рддреЛ, рдХреЛрд░рдЯрд╛рдЗрди рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ (рдПрдХ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди)?
рдХреЛрд░рдЯрд╛рдЗрдиреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ:
рдХреЛрдЯрд▓рд┐рди рдХреЙрд░рдЖрдЙрдЯреНрд╕ рдореЗрдВ {} рдмрдирд╛рдо async {} рд▓реЙрдиреНрдЪ
рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ launch{}
рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ async{}
рдПрдХ Deferred
рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ await()
рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдПрдХ coroutine рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ Future
, рдЬрд╣рд╛рдВ рд╣рдо future.get()
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред ред
рдЪрд▓реЛ рд▓реЙрдиреНрдЪ {} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
fun main(args: Array<String>) { println("Kotlin Start") launch(CommonPool) { delay(2000) println("Kotlin Inside") } println("Kotlin End") }
// The output will be // Kotlin Start // Kotlin End // Kotlin Inside
рдпрд╣ рдХреЛрдб рдЗрд╕ рдереНрд░реЗрдб рдкреВрд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ рдХреЛрд░рдЖрдЙрдЯ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо CommonPool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ ForkJoinPool.commonPool () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреЛрд░рдЯрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдзрд╛рд░рд╛рдПрдБ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдзрд╛рдЧрд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрд░рдЖрдЙрдЯ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдзрд╛рдЧреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП рдПрдХ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
fun main(args: Array<String>) { delay(2000) }
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛:
рд░реБрдХрд╛рд╡рдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреЛрд░рдЯрд╛рдЗрди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд░реБрдХрд╛рд╡рдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рд▓рдВрдм рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛрд░рдЯрд╛рдЗрди рдпрд╛ рдЕрдиреНрдп рд░реБрдХрд╛рд╡рдЯ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ:
fun main(args: Array<String>) { runBlocking { delay(2000) } }
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
suspend fun doWorkFor1Seconds(): String { delay(1000) return "doWorkFor1Seconds" }
suspend fun doWorkFor2Seconds(): String { delay(2000) return "doWorkFor2Seconds" }
// Serial execution private fun doWorksInSeries() { launch(CommonPool) { val one = doWorkFor1Seconds() val two = doWorkFor2Seconds() println("Kotlin One : " + one) println("Kotlin Two : " + two) } }
// The output is // Kotlin One : doWorkFor1Seconds // Kotlin Two : doWorkFor2Seconds
рдЕрдм рдЖрдЗрдП async {} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦреЗрдВ
// Parallel execution private fun doWorksInParallel() { val one = async(CommonPool) { doWorkFor1Seconds() } val two = async(CommonPool) { doWorkFor2Seconds() } launch(CommonPool) { val combined = one.await() + "_" + two.await() println("Kotlin Combined : " + combined) } } // The output is // Kotlin Combined : doWorkFor1Seconds_doWorkFor2Seconds
рдХреНрдпреЛрдВрдХрд┐ async{}
рд╣рдо async{}
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП await()
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЦреБрд╢ рд╕реАрдЦрдиреЗ;)