๋จผ์ Coroutine์ ๋จ์ด์ ๋ป์ ์์๋ณด๋ฉด
coroutine์ co ์ routine์ ํฉ์ฑ์ด์ด๋ค.
co ๋ cooperation, "ํ๋ ฅํ๋ค" ๋ผ๋ ๋ป์ด๊ณ , routine๋ ํจ์ ๋๋ ํ๋์ ํ
์คํฌ๋ฅผ ์๋ฏธํ๋ค.
๊ฐ๋จํ๊ฒ ํด์ํ์๋ฉด ํ๋ ฅํ๋ ํจ์๋ผ๊ณ ๋งํ ์ ์๋ค.
- ํ๋ ฅํ ๋ฉํฐํ ์คํน
- ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ์ง์
์ผ๋ฐ์ ์ธ ํจ์๋ฅผ Sub routine์ด๋ผ๊ณ ๋ํ๋ฉฐ Sub routine์ return์ ๋ง๋๋ฉด ํ์ถํ์ฌ Main Routine์ผ๋ก ๋์๊ฐ๊ฒ ๋๋ค.
์ฆ ์ผ๋ฐ์ ์ธ Sub routine์ return๋ฌธ์ ๋ง๋๊ฑฐ๋ ๋ซ๋๊ดํธ}๋ฅผ ๋ง๋๊ธฐ์ ๊น์ง๋ ํ์ถํ์ง ์์ผ๋ฏ๋ก ์ง์
์ ์ด 1๊ฐ, ํ์ถ์ ๋ 1๊ฐ์ด๋ค.
๋ฐ๋ฉด, Coroutine์ ์ง์
์ ๊ณผ ํ์ถ์ ์ด ์ฌ๋ฌ๊ฐ์ด๋ค. Coroutine block์ ์์ฑํ๊ณ ๊ทธ์์์ suspend ํค์๋๋ฅผ ๊ฐ์ง Aํจ์๋ฅผ ๋ง๋๋ฉด
๋ ์ด์ ์๋ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ฉ์ถ๋ค(suspend) ๊ทธ๋ฆฌ๊ณ Coroutine block์ ํ์ถํ๋ค.
ํ์ถํ๋ค ๋ค๋ฅธ ์ฝ๋๋ค์ด ์คํ๋๋ฉฐ Aํจ์๋ ์ด๋์ ๊ฐ ์คํ๋๊ณ ์๋ค.
๋ค๋ฅธ ์ฝ๋๋ค์ด ์คํ๋๋ค๊ฐ๋ Aํจ์๊ฐ ๋๋๊ฒ๋๋ฉด ๋ค์ Coroutine block์ผ๋ก ์ง์
ํ์ฌ Aํจ์ ๋ค์๋ถ๋ถ์ด ์คํ๋๋ค.
์ด๋ฅผ ํ๋ ฅํ ๋ฉํฐํ
์คํน์ด๋ผ ํ๋ค.
ํจ์๋ฅผ ์ค๊ฐ์ ๋น ์ ธ๋์๋ค๊ฐ, ๋ค๋ฅธ ํจ์์ ์ง์
ํ๊ณ , ๋ค์ ์์ ์ผ๋ก ๋์์ ๋ฉ์ถ์๋ ๋ถ๋ถ๋ถํฐ ๋ค์ ์์ํ๋ ์ด ํน์ฑ์
๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
Coroutine์ ์์ฑํ์ฌ์ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ํ๋ ํน์ง๋๋ฌธ์ ๊ฐ๋ณ๊ณ ํจ์จ์ ์ธ ์ฑ๋ฅ์ผ๋ก ๋์์ด ๊ฐ๋ฅํ๋ค.
๋ง์ฝ ์ค๋ ๋๋ก Coroutine์ด ์๋ Thread๋๊ฐ๋ก ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ฉด
CPU๊ฐ ๋งค๋ฒ Thread๋ฅผ ์ ์ฐํ๋ค๊ฐ ๋์์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ณตํ์ฌ Context-Switching์ด ๋ฐ์ํ๋ค (๋น์ฉ์ด ํฌ๋ค)
| ๋์์ฑ | ๋ณ๋ ฌ |
|---|---|
| ๋์์ ์คํ๋๋ ๊ฒ ๊ฐ์ด ๋ณด์ด๋ ๊ฒ | ์ค์ ๋ก ๋์์ ์ฌ๋ฌ ์์ ์ด ์ฒ๋ฆฌ๋๋ ๊ฒ |
![]() |
![]() |
์ค๋ ๋ ์คํ ํน์ ์ข
๋ฃ์ ์ค๋ ๋์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต๊ตฌํ๋ ํ๋ก์ธ์ค
= ๋๊ฐ์ ์ค๋ ๋์์ ์์
์ CPU๊ฐ ๋งค๋ฒ ์ค๋ ๋๋ฅผ ์ ์ ํ๋ค๊ฐ ๋์์ฃผ๋ ๊ฒ์ ๋ฐ๋ณตํ ๋ ๋น์ฉ ๋ฐ์
์ฝ๋ฃจํด์ด ํ๋์ ์คํ-์ข ๋ฃ๋์ด์ผ ํ๋ ์ผ(Job)์ด๋ผ๋ฉด ์ค๋ ๋๋ ๊ทธ ์ผ์ด ์คํ๋๋ ๊ณณ์ด๋ค.
- ์ฝ๋ฃจํด๊ณผ ์ค๋ ๋๋ ๋ชจ๋ ๋์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ค
- ํ๋์ ์ค๋ ๋์ ์ฌ๋ฌ๊ฐ์ ์ฝ๋ฃจํด์ด ๋์์(concurrency) ์คํ๋ ์ ์๋ค
- ๋ ๋๋ ์ฌ๋ฌ์ค๋ ๋๊ฐ ์๋ค๋ฉด ๋ณ๋ ฌ๋ก(Parallelism) ์คํ๋๋ค
- ์ฝ๋ฃจํด์ ๊ฒฝ์ฐ ์ค๋ ๋ํ์ ์ฌ์ฉํ๋ dispatcher๋ก ์ฝ๋ฃจํด๋ค์ ์คํํ๋ฉด ์ค๋ ๋์ฒ๋ผ ๋ณ๋ ฌํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค
- ๊ฒฝ๋ : ์ฝ๋ฃจํด์ ์คํ์ค์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๋ ์ ์ง๋ฅผ ์ง์ํ๋ฏ๋ก ๋จ์ผ์ค๋ ๋์์ ๋ง์ ์ฝ๋ฃจํด์ ์คํํ ์ ์๋ค
- ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ์ : ๊ตฌ์กฐํ๋ ๋์์คํ์ ์ฌ์ฉํ์ฌ ๋ฒ์ ๋ด์์ ์์ ์ ์คํํ๋ค
- ์ฒ๋ฆฌ ๋์ค ์ทจ์ ๊ฐ๋ฅ : ์คํ์ค์ธ ์ฝ๋ฃจํด์ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ํตํด ์๋์ผ๋ก ์ทจ์๊ฐ ์ ๋ฌ๋๋ค
- ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์ค๋จ(blocking)์ํค์ง ์๊ณ ์ค์ง(suspend)ํ๋ ํํ๋ก ๊ฐ๋ณ๊ฒ ๋์

