#1 μ€λ λ (Thread)
#1-1 κ°λ

λ€λ₯Έ μ©μ΄λ€κ³Όμ κ΄κ³λ₯Ό ν΅ν΄ 'μ€λ λ'λΌλ κ°λ μ μ€κ³½μ μ‘λλ€.
#1-2 μ€λ λμ μ€μκ°μ±

μ΄ μμ λμλμμ μμ Aμμμ μμ Bμμμ μ€λ λλ κ°κ° 1κ°μ 2κ°μ κ·Έ κ°―μκ° μλ‘ λ€λ₯΄λ€. νλ‘μΈμ€λ νλ‘κ·Έλ¨μ μ€ν μ€μΈ μΈμ€ν΄μ€μ΄κΈ° λλ¬Έμ, μ€λ λλ μ€μκ°μ±μ μ§λλ€. μλ₯Ό λ€μ΄, μ¬λμ νλ‘μΈμ€λΌκ³ λΉμ ν΄λ³΄κ² λ€. ν΅νλ₯Ό νλ©΄μ μ리λ₯Ό νλ μ¬λμ 2κ°μ λ³λ ¬ μ€λ λλ₯Ό μ§λκ³ μλ€κ³ λ³Ό μ μλ€. κ·Έλ¬λ€κ° ν΅νκ° μ’ λ£λμ΄ μ리μλ§ μ§μ€νλ©΄, κ·Έ μ¬λμ μ리λΌλ λ¨μΌ μ€λ λλ§ μλ νλ‘μΈμ€κ° λλ€. μ΄μ κ°μ΄ νλ‘μΈμ€κ° μ΄λ μμ μ΄λ μκ°μ μλλμ λ°λΌμ μ€λ λμ κ°―μλ μΌλ§λ μ§ λ³ν μ μλ€.
#2 μ€λ λ ν (Thread Pool)
#2-1 κ°λ
νλ‘κ·Έλ¨μ΄ λͺ λ Ήμ΄μ μ§ν©μ΄λ―, μ€λ λμ μ§ν©μ μ€λ λ νμ΄λ€. νμ§λ§ "λͺ λ Ήμ΄λ₯Ό λͺ¨μ νλ‘κ·Έλ¨μ λ§λ λ€"λ λ§μ κ·Έλ΄λ―ν΄λ, "μ€λ λλ₯Ό λͺ¨μ μ€λ λ νμ λ§λ λ€"λ λ§μ μ΄μνλ€. μλνλ©΄, μ€λ λλ μ€λ λ νλ‘λΆν° λ§λ€μ΄μ§κΈ° λλ¬Έμ΄λ€. μ¦, μ νκ΄κ³κ° λ°λλ€. νλ‘μΈμ€λ μ€λ λ νμκ² μ€λ λλ₯Ό 'μμ²'νλ€. μ€λ λ νμ μ΄λ€ ν μ€λ λλ₯Ό 'ν λΉ'νλ€. κ·Έ ν λΉλ μ€λ λμ μ°μμ΄ λ€νλ©΄, λ€μ μ€λ λ νλ‘ 'λ°ν'λλ€. μ€λ λ νμ μ΄λ¦μ ν(Pool)μ΄ λ€μ΄κ° μλ μ΄μ κΈ°λ νλ€. Poolμ μ¬μ μ μλ―Έλ μ λ©μ΄, λͺ¨μΌλ€, κ³ μ¬ μλ κ³³ λ°μλ€. μ€λ λ νλ‘λΆν° μ€λ λλ₯Ό ν λΉλ°λ κ²μ μ λ©μ΄μμ λκ°λ₯Ό κΊΌλ΄μ€λ κ²μΌλ‘ λΉμ ν μ μλ€.
Coroutineμμ μ€λ λλ₯Ό ν λΉλ°λ μκ°μ Coroutine builderλ₯Ό μ¬μ©νλ μκ°μ΄λ€ (CoroutineScopeλ₯Ό μ¬μ©νλ μκ°μ΄ μλλ€. CoroutineScopeλ Coroutine builderμ νκ²½ μ€μ μ λΆκ³Όνλ€). κ·Έλ¦¬κ³ κ·Έ Builderκ° μ’ λ£λλ©΄, μλμΌλ‘ λ°νλλ€.
#2-2 λ¨μΌ μ€λ λλ§μ΄ μ‘΄μ¬νλ μ€λ λ ν - Dispatchers.Main
μλλ‘μ΄λμ Dispatchers.Mainμ λ§μΉ, λ¨μΌ ν¨μκ° λ³Έμ²΄μ§λ§ ννλ μΈν°νμ΄μ€μΈ SAMκ³Ό λΉμ·νλ€. Dispatchers.Mainμ ννλ§ μ€λ λ νμ΄κ³ , μ¬μ€μ λ¨μΌ μ€λ λλ€. 1κ°μ μ€λ λλ§μ΄ ν λΉ λ° λ°νλλ―λ‘, Dispatchers.Main μ€λ λ νμ μ¬λ¬κ°μ§ μΌμ μν€λ©΄ μ λλ‘ λ³λ ¬μ μΌλ‘ μ€νλμ§ μκ³ , μμ²ν μμλλ‘ μ§λ ¬(μμ°¨)μ μΌλ‘ μ€νλλ€.
λ€νν, μλλ‘μ΄λμ Dispatchers.Mainμ Block λλ Suspendκ° μμ²μ μΌλ‘ λΆκ°λ₯νλ€. κ·Έλ κ² μ€κ³λ μ΄μ λ μλλ‘μ΄λμμλ λ©μΈ μ€λ λ(Main Thread)μμ λ€νΈμν¬ μμ²μ΄λ νμΌ μ μΆλ ₯ λ±κ³Ό κ°μ UI μΈμ μΈ μμ μ μννλ©΄ μ±μ μλ΅μ±μ΄ λ¨μ΄μ§κΈ° λλ¬Έμ΄λ€. λ°λΌμ Dispatchers.Mainμ μ¬λ¬κ°μ§ μΌμ μμΌμ μ±μ΄ λ²λ² μ΄λ(?) κ±Έ λ³΄κ³ μΆλ€λ©΄, runBlockingμ΄λ Job.join()μΌλ‘λ λΆκ°λ₯νκ³ κ·Έλ₯ Main μ€λ λμ μΌμ 무μνκ² λ§μ΄ μν€λ©΄ λλ€. κ·Έ μλ μ΄ κ²μκΈμ #2-3μ μλ€.
#3 μμ½
μ€λ λλ νλ¦μ΄κ³ , μ€λ λ ν(Pool)λ‘λΆν° ν λΉλλ€.
'κΉ¨μ κ°λ π > Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kotlin] Coroutines - Parallel Decomposition (0) | 2024.02.17 |
---|---|
[Kotlin] Coroutines - Structured Concurrency (0) | 2024.02.16 |
[Kotlin] Coroutines - suspend ν€μλ (0) | 2024.02.14 |
[Kotlin] Coroutines - runBlocking (0) | 2024.02.13 |
[Kotlin] Coroutines - Coroutine builder (0) | 2024.02.12 |