mutex ?
์์์ฑ ์๋ฐ
์์์ฑ ์๋ฐ์ ๋์์ฑ ์ค๋ฅ ์ ํ์ด๋ค. ์ด ์ ํ์ ์ค๋ฅ๋ ์ ํํ ๋๊ธฐํ ์์ด ๊ฐ์ฒด์ ์ํ๋ฅผ ๋์์ ์์ ํ ๋ ๋ฐ์ํ๋ค. ์์์ฑ ์๋ฐ์ ์ฝํ๋ฆฐ์์๋ ๋ฐ์ํ ์ ์์ง๋ง ์ค๋ฅ๋ฅผ ํผํ ์ ์๋๋ก ๋์์ธํ๋ ๋ฐ ๋์์ด ๋๋ ๊ธฐ๋ณธํ์ ์ ๊ณตํ๋ค.
์์์ฑ์ ์๋ฏธ
์ํํธ์จ์ด ์คํ์ ๊ด์ ์์, ์ฐ์ฐ(operation)์ด ๋จ์ผํ๊ณ ๋ถํ ํ ์ ์์ ๋ ์ด ์ฐ์ฐ์ ์์์ (atomic)์ด๋ผ ํ๋ค.
๋์์ฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ฒ ๋๋ฉด ๊ณต์ ์ํ๋ฅผ ์์ ํ๋ ์ฝ๋ ๋ธ๋ก์ด ๋ค๋ฅธ ์ค๋ ๋์ ๋ณ๊ฒฝ ์๋์ ๊ฒน์น๋ฉด์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์์ฐจ์ ์ผ๋ก ์คํํ๋ฉด, counter ๊ฐ์ ๋ํด ๊ฑฑ์ ํ ํ์ ์์ด incremental()์ ์ํ๋ ๋งํผ ํธ์ถํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๋์์ฑ์ ์ถ๊ฐํ๋ฉด ๋ด๋ถ์ ๋ง์ ๊ฒ๋ค์ด ๋ฐ๋๋ค.
CommonPool์ CoroutineContext๋ก ์ฌ์ฉํด ์์ฒญํ ํ์๋งํผ counter๋ฅผ ๋๋ฆฌ๊ณ ์๋ค.
์คํ ํ counter์ ๊ฐ์ด ๊ฐ๋ 2100๋ณด๋ค ๋ฎ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
counter++๋ฅผ ์ํํ๋ ์ฝ๋๊ฐ ์์์ ์ด์ง ์์์ ๋ฐ์ํ๋ค. ์ด๊ฒ์ด ์ค์ ๋ก ์๋ฏธํ๋ ๋ฐ๋ asyncIncrement ๋ด๋ถ์ ์ฌ๋ฌ for ๋ฃจํ ์ค ์ฌ๋ฌ ์ฌ์ดํด์ด counter๊ฐ์ ์ค์ง ํ ๋ฒ๋ง ๋ฐ๊ฟจ๋ค๋ ๊ฒ์ด๋ค.
์ฝ๋ ๋ธ๋ก์ ์์์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด ๋ธ๋ก ์์์ ๋ฐ์ํ๋ ์ด๋ค ๋ฉ๋ชจ๋ฆฌ ์์ธ์ค๋ ๋์์ ์คํ๋์ง ์๋๋ก ํด์ผ ํ๋ค.
์ค๋ ๋ ํ์
์ค๋ ๋ ํ์ ์ ๊ฐ์
์ค๋ ๋ ํ์ ์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, ๊ณต์ ์ํ์ ์ ๊ทผํ๋ ๋ชจ๋ ์ฝ๋ฃจํด์ ๋จ์ผ ์ค๋ ๋์์ ์คํ๋๋๋ก ํ์ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ํ๊ฐ ๋ ์ด์ ์ค๋ ๋ ๊ฐ์ ๊ณต์ ๋์ง ์์ผ๋ฉฐ ํ๋์ ์ค๋ ๋๋ง ์ํ๋ฅผ ์์ ํ๋ค๋ ๋ป์ด๋ค. ( ์ด ๋ฐฉ๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๋ ์ ์ ํํด์๋ง ์ ์ฉํ๋ค.)
์กํฐ
์ค๋ ๋ ํ์ ์ ์์์ ์ธ๊ธํ ์๋๋ฆฌ์ค์์๋ ์ ์๋ํ์ง๋ง ์ฑ์ ์ฌ๋ฌ ๋ค๋ฅธ ๋ถ๋ถ์์ ๊ณต์ ์ํ๋ฅผ ์์ ํด์ผ ํ๊ฑฐ๋, ์์ ๋ธ๋ก์ ๋ ๋์ ์ ์ฐ์ฑ์ ์ํ๋ ์๋๋ฆฌ์ค์ ๊ฒฝ์ฐ ์ด๋ฅผ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
์กํฐ์ ์ญํ
์กํฐ๋ ๋ ๊ฐ์ง ๊ฐ๋ ฅํ ๋๊ตฌ์ ์กฐํฉ์ด๋ค. ์ํ ์์ธ์ค๋ฅผ ๋จ์ผ ์ค๋ ๋๋ก ํ์ ํ๊ณ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ฑ๋๋ก ์ํ ์์ ์ ์์ฒญํ ์ ์๋ค. ์กํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์์ ํ๊ฒ ์ ๋ฐ์ดํธํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ด๋ฅผ ์ํ ๊ฐ๋ ฅํ ์ปค๋ฎค๋์ผ์ด์ ๋งค์ปค๋์ฆ๋ ๊ฐ์ถ๊ฒ ๋๋ค.
์กํฐ ์์ฑ
์ฌ๋ฌ ๋ค๋ฅธ ์ค๋ ๋์์ counter๋ฅผ ์์ ํ๊ฒ ์์ ํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด์ ์นด์ดํฐ์ ๊ฐ์ ์บก์ํํ์ผ๋ฏ๋ก ์์ ๋ ๊ฐ ๋ฉ์์ง์ ๋ฐ๋ผ ๊ฐ์ ์ฆ๊ฐ์ํค๋ ์กํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์ ์ก๋ ๋ฉ์์ง๋ฅผ ์ค์ ๋ก๋ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, ๋จ์ํ ์กํฐ์ ์ ํ์ Void?๋ก ์ค์ ํ๋ฉด ํธ์ถ์๊ฐ null์ ๋ณด๋ผ ์ ์๋ค.
์กํฐ๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ฅ ํ์ฅ
์กํฐ๋ ์ฌ์ฉํ๋ฉด ์ฑ๋์ด ์ ์ฒด ์ฝ๋ฃจํด์ ์์์ ์ผ๋ก ์ ์งํ๋ฉด์ ๋ ๋์ ์ ์ฐ์ฑ์ ํ์ฉํ๋ค๋ ์ ์ด ๊ฐ์ฅ ์ปค๋ค๋ ์ฅ์ ์ด๋ค.
์กํฐ๋ฅผ ์ฌ์ฉํด ์นด์ดํฐ๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ์ ์๋๋ก ๋ง๋ค์ด๋ณด์
๊ทธ๋ฐ ๋ค์์ ์กํฐ์ ์ฝ๋ฃจํด์ ์ ๋ฐ์ดํธํด ์ด๋ฐ ์ก์ ์ ์ฐ์ฐ์ ๋งคํํ ์ ์๋ค.
๋ฉ์ธ ์ค๋ ๋๋ CommonPool์ ์ฌ์ฉํด ์นด์ดํฐ๋ฅผ ๋์์ ์ฆ๊ฐ ๋ฐ ๊ฐ์์ํค๋ ์ฝ๋ฃจํด์ ์์ฑํ๋ฉฐ, ์ฝ๋ฃจํด์ ์ก์ ๊ณผ ํจ๊ป ๋ฉ์์ง๋ฅผ ์กํฐ์ ๋ณด๋ด์ ์ด๋ฅผ ์ํํ๋ค.
์กํฐ ์ํธ ์์ฉ์ ๋ํ ์ถ๊ฐ ์ ๋ณด
ํด๋ผ์ด์ธํธ ๊ด์ ์์ ์กํฐ๋ ๋จ์ํ ์ก์ ์ฑ๋์ด๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ๊ด์ ์์ ์กํฐ์ ์ํ๋ฐฉ์์ ๊ณ ๋ฏผํด ๋ณผ ํ์๊ฐ ์๋ค.
๋ฒํผ๋ ์กํฐ
์กํฐ๋ ๋ค๋ฅธ ์ก์ ์ฑ๋๊ณผ ๋์ผํ๊ฒ ๋ฒํผ๋ง๋ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์กํฐ๋ ๋ฒํผ๋ง๋์ง ์๋๋ค. ๋ฉ์์ง๊ฐ ์์ ๋ ๋๊น์ง ๋ฐ์ ์๋ฅผ send()์์ ์ผ์ ์ค๋จํ๋ค. ๋ฒํผ๋ง๋ ์กํฐ(Buffered actors)๋ฅผ ์์ฑํ๋ ค๋ฉด capacity ๋งค๊ฐ๋ณ์๋ฅผ ๋น๋์ ์ ๋ฌํด์ผ ํ๋ค.
CoroutineContext๋ฅผ ๊ฐ๋ ์กํฐ
counter ์์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ฒ๋ผ ์กํฐ๋ฅผ ์์ฑํ ๋ CoroutineContext๋ฅผ ์ ๋ฌํ ์ ์๋ค.
์ํธ ๋ฐฐ์
์ง๊ธ๊น์ง๋ ์ฝ๋ ๋ธ๋ก์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค๊ฐ ๋จ์ผ ์ค๋ ๋์์ ๋ฐ์ํ๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ ์์์ฑ ์๋ฐ์ ํํผํ๋ค. ๋ ๊ฐ์ ์ฝ๋ ๋ธ๋ก์ด ๋์์ ์คํ๋๋ ๊ฒ์ ํผํ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค. ๋ฐ๋ก ์ํธ ๋ฐฐ์ ๋ค.
์ํธ ๋ฐฐ์ ์ ์ดํด
์ํธ ๋ฐฐ์ ๋ ํ ๋ฒ์ ํ๋์ ์ฝ๋ฃจํด๋ง ์ฝ๋ ๋ธ๋ก์ ์คํํ ์ ์๋๋ก ํ๋ ๋๊ธฐํ ๋งค์ปค๋์ฆ์ ๋งํ๋ค.
์ฝํ๋ฆฐ ๋ฎคํ ์ค์ ๊ฐ์ฅ ์ค์ํ ํน์ง์ ๋ธ๋ก๋์ง ์๋๋ค๋ ์ ์ด๋ค. ์คํ ๋๊ธฐ ์ค์ธ ์ฝ๋ฃจํด์ ์ ๊ธ์ ํ๋ํ๊ณ ์ฝ๋ ๋ธ๋ก์ ์คํํ ์ ์์ ๋๊น์ง ์ผ์ ์ค๋จ๋๋ค. ์ฝ๋ฃจํด์ ์ผ์ ์ค๋จ๋์ง๋ง ์ผ์ ์ค๋จ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฎคํ ์ค๋ฅผ ์ ๊ธ ์ ์๋ค.
๋ฎคํ
์ค ์์ฑ
๋ฎคํ ์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด Mutex ํด๋์ค์ ์ธ์คํด์ค๋ง ์์ฑํ๋ฉด ๋๋ค.
ํ ๋ฒ์ ํ๋์ ์ฝ๋ฃจํด๋ง ์ ๊ธ์ ๋ณด์ ํ๊ณ , ์ ๊ธ์ ์๋ํ๋ ๋ค๋ฅธ ์ฝ๋ฃจํด์ ์ผ์ ์ค๋จ ํจ์ผ๋ก์จ ์นด์ดํฐ์ ๋ํ ๋ชจ๋ ์ฆ๋ถ์ด ๋๊ธฐํ ๋๋๋ก ํ๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ฒ์ ํธ์ถํ๋๋ผ๋ counter์ ์ฆ๋ถ ์ค ์ด๋ ๊ฒ๋ ์ ์ค๋์ง ์๋๋ค.
์ํธ ๋ฐฐ์ ์ ์ํธ ์์ฉ
๋๊ฐ withLock()์ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค. ์ ๊ธ ๋ฐ ์ ๊ธ ํด์ ์ ๋ํ ์์ธ ์ ์ด๊ฐ ํ์ํ๋ฉด lock, unlock()์ ์ฌ์ฉํ ์ ์๋ค.
isLocked ์์ฑ์ ์ฌ์ฉํด ๋ฎคํ ์ค๊ฐ ํ์ฌ ์ ๊ฒจ ์๋์ง ํ์ธํ ์ ์๋ค.
๋ฎคํ ์ค๋ฅผ ์ ๊ธ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ(Boolean)์ ๋ฐํํ๋ tryLock()์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
ํ๋ฐ์ฑ ๋ณ์
ํ๋ฐ์ฑ ๋ณ์๋ ๊ตฌํํ๋ ค๋ ์ค๋ ๋ ์์ (thread-safe) ์นด์ดํฐ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ค. ๊ทธ๋ฌ๋ ํ๋ฐ์ฑ ๋ณ์๋ ์ผ๋ถ ์๋๋ฆฌ์ค์์ ์ค๋ ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ณต์ ํด์ผ ํ ๋ ๊ฐ๋จํ ์๋ฃจ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ค.
์ค๋ ๋ ์บ์
JVM์์ ๊ฐ ์ค๋ ๋๋ ๋นํ๋ฐ์ฑ ๋ณ์์ ์บ์๋ ์ฌ๋ณธ์ ๊ฐ์ง ์ ์๋ค. ์ด ์บ์๋ ํญ์ ๋ณ์์ ์ค์ ๊ฐ๊ณผ ๋๊ธฐํ๋์ง๋ ์๋๋ค. ํ ์ค๋ ๋์์ ๊ณต์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์บ์๊ฐ ์ ๋ฐ์ดํธ๋ ๋๊น์ง ๋ค๋ฅธ ์ค๋ ๋์์๋ ๋ณผ ์ ์๋ค.
@Volatile
๋ณ์์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ์ค๋ ๋์ ์ฆ์ ํ์ํ๊ธฐ ์ํด ๋ค์ ์์ ์์ @Volatile ์ฃผ์์ ์ฌ์ฉํ ์ ์๋ค.
@Volatile์ Kotlin/JVM์์๋ง ์ฌ์ฉํ ์ ์๋ค. ํ๋ฐ์ฑ(volatility)์ ๋ณด์ฅํ๋ ๊ธฐ๋ฅ์ JVM์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํ๋ซํผ์์๋ ์ฌ์ฉํ ์ ์๋ค.
@Volatile์ด ์ค๋ ๋ ์์ ์นด์ดํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ ์ด์
๊ทธ๋ฌ๋ ์ด์ ์ ์์ ๋ฅผ ์คํํ๋ฉด ์ค์ ์ผ๋ถ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ค๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ฐ์๋ ๋ ๊ฐ์ง ์ด์ ๊ฐ ์๋ค.
๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ฝ๊ฑฐ๋ ์์ ํ๋ ๋์ ์ค๋ ๋์ ์ฝ๊ธฐ๊ฐ ๋ฐ์ํ ๋ : ๋ ์ค๋ ๋๋ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ก ์์ํด ๋์ผํ ์ฆ๋ถ์ ๋ง๋ ๋ค. ๋ ๋ค ์นด์ดํฐ๋ฅผ X์์ Y๋ก ๋ณ๊ฒฝํ๋ฏ๋ก ํ ์ฆ๋ถ์ฉ ์ ์ค๋๋ค.
๋ค๋ฅธ ์ค๋ ๋๊ฐ ์์ ํ ํ ์ค๋ ๋์ ์ฝ๊ธฐ๊ฐ ๋ฐ์ํ์ง๋ง, ์ค๋ ๋์ ๋ก์ปฌ ์บ์๊ฐ ์ ๋ฐ์ดํธ๋์ง ์์์ ๋: ์ค๋ ๋๋ ๋ก์ปฌ ์บ์๊ฐ ์ ๋ ์ ๋ฐ์ดํธ๋์ง ์์์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ Y๋ก ์ค์ ํ ํ์๋ ์นด์ดํฐ์ ๊ฐ์ X๋ก ์ฝ์ ์ ์๋ค. ๋ ๋ฒ์งธ ์ค๋ ๋๋ ์นด์ดํฐ์ ๊ฐ์ ์ฆ๊ฐ์ํค์ง๋ง ์ค๋๋ ๊ฐ์ผ๋ก ์์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ฎ์ด ์ด๋ค.
@Volatile์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
ํ๋ฐ์ฑ ๋ณ์๋ฅผ ์ฌ์ฉํด์ ๋ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ ๊ฐ์ง ์๋๋ฆฌ์ค ์ ์ ๊ฐ ์ฐธ์ด์ด์ผ ํ๋ค.
๋ณ์ ๊ฐ์ ๋ณ๊ฒฝ์ ํ์ฌ ์ํ์ ์์กดํ์ง ์๋๋ค.
ํ๋ฐ์ฑ ๋ณ์๋ ๋ค๋ฅธ ๋ณ์์ ์์กดํ์ง ์์ผ๋ฉฐ, ๋ค๋ฅธ ๋ณ์๋ ํ๋ฐ์ฑ ๋ณ์์ ์์กดํ์ง ์๋๋ค.
์ฒซ ๋ฒ์งธ ์ ์ ๋ ์ค๋ ๋ ์์ ์นด์ดํฐ์ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ๋ฐฐ์ ํ๋ ๋ฐ ๋์์ด ๋๋ค. ๋ฐ๋ฉด์ ๋ ๋ฒ์งธ ์ ์ ๋ ํ๋ฐ์ฑ ๋ณ์์ ์์กด์ฑ ๋๋ฌธ์ ์ผ๊ด์ฑ ์๋ ์ํ๊ฐ ์์ฑ๋๋ ๊ฒ์ ํผํ ์ ์๋๋ก ๋์์ค๋ค. ์ด์ ์ฌ๋ก๋ ๋ ๋ฒ์งธ ์ ์ ๋ฅผ ๋ฐ๋ฅด์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์๋ค.
ํด๋น ์์ ์์๋ ๋ ์ ์ ๋ชจ๋ ์ ํจํ๋ค.
shutdown()์์ ์์ฑ๋ shutdownRequested์ ์์ ์ ๋ณ์ ์์ฒด์ ํ์ฌ ์ํ์ ์์กดํ์ง ์๋๋ค. ํญ์ true๋ก ์ค์ ๋๋ค.
๋ค๋ฅธ ๋ณ์๋ shutdownRequested์ ์์กดํ์ง ์์ผ๋ฉฐ, ๋ค๋ฅธ ๋ณ์์๋ ์์กดํ์ง ์๋๋ค.
์์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ
์์์ฑ์ ์์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ์ฐ์ฐ์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ค.
์์ฝ
๊ณต์ ์ํ๋ฅผ ๊ฐ์ง๋ฉด ๋์์ฑ ์ฝ๋์์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. ์ค๋ ๋์ ์บ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์ค์ ์์์ฑ์ผ๋ก ์ธํด ๋ค๋ฅธ ์ค๋ ๋์์ ์ํํ ์์ ์ฌํญ์ด ์ ์ค๋ ์ ์๋ค. ์ํ์ ์ผ๊ด์ฑ์ ํด์น๋ ์์ธ์ด ๋๋ค.
์ค๋ ๋ ๋๊ธฐํ๋ฅผ ํ ์ ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ํ๋์ ์ค๋ ๋๋ง ์ํ์ ์ํธ ์์ฉํ๋๋ก ๋ณด์ฅํด์ ์ฐ๊ธฐ๊ฐ ์๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก๋ง ๊ณต์ ํ ์ ์๊ฒ ํ๋๊ฒ๊ณผ, ์ฝ๋ ๋ธ๋ก์ ์์์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์ ์ ๊ธ์ ์ฌ์ฉํด ์ฝ๋ ๋ธ๋ก์ ์คํํ๋ ค๋ ๋ชจ๋ ์ค๋ ๋์ ๋๊ธฐํ๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด๋ค.
CoroutineContext๋ฅผ ํ๋์ ์ค๋ ๋๋ก ๋ ๋์คํจ์ฒ์ ํจ๊ป ์ฌ์ฉํด ์ฝ๋ฃจํด์ ์คํ์ ๋จ์ผ ์ค๋ ๋์์ ์คํ๋๋๋ก ๊ฐ์ ํ๋ค.
์กํฐ๋ ์ก์ ์ฑ๋๊ณผ ์ฝ๋ฃจํด์ ์์ด๋ค. ์กํฐ๋ฅผ ๋จ์ผ ์ค๋ ๋๋ก ํ์ ํด ๋ฉ์์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋ณด๋ค๋ ๊ฐ๋ ฅํ ๋๊ธฐํ ๋งค์ปค๋์ฆ์ ๊ตฌ์ถํ ์ ์๋ค. ์ํ๋ ์ค๋ ๋์์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ๋ณ๊ฒฝ์ ์์ฒญํ ์ ์์ง๋ง, ๋ณ๊ฒฝ์ ํน์ ์ค๋ ๋์์ ์คํ๋ ๊ฒ์ด๋ค.
์กํฐ๋ ํนํ ์ฝ๋ฃจํด์ ์ค๋ ๋ ์ ํ๊ณผ ์์ ์ด๋ค ์ด์ฉํ๋ฉด ์ข๋ค. ์๋ฅผ ๋ค์ด ์กํฐ๊ฐ ์ค๋ ๋ ํ์์ ์คํํ๋๋ก ์กํฐ๊ฐ ์ฌ์ฉํ CoroutineContext๋ฅผ ์ง์ ํ ์ ์๋ค.
์กํฐ๋ ์ฝ๋ฃจํด์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ์์ํ ์ ์๋ค.
์ ๊ธ์ ์ฌ์ฉํด ์ฝ๋ฃจํด์ ๋๊ธฐํํ๊ธฐ ์ํด ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋ฃจํด์ด ๋๊ธฐํ๋ ์์ ์ ์ํํ ์ ์๋๋ก ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์ฝ๋ฃจํด์ ์ผ์์ค๋จํ ์ ์๋ค.
JVM์ ์ค๋ ๋์ ์บ์์ ์ ์ฅ๋์ง ์๋ ๋ณ์์ธ ํ๋ฐ์ฑ ๋ณ์๋ฅผ ์ ๊ณตํ๋ค. ํ๋ฐ์ฑ ๋ณ์๋ ์์ ๋ ๋ ์ ๊ฐ์ ์ด์ ๊ฐ์ ์์กดํ์ง ์์ผ๋ฉฐ ํ๋ฐ์ฑ ๋ณ์์ ์ํ๋ ๋ค๋ฅธ ์์ฑ์ ์์กดํ์ง ์๊ฑฐ๋ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๊ฒฝ์ฐ๋ค.
์์์ ๋ณ์๋ ๋จ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํ์ง๋ง ๊ณต์ ๋๋ ์ํ๊ฐ ํ๋ ์ด์์ ์ฌ๋ฌ ๋ณ์์ธ ๊ฒฝ์ฐ ํ์ฅํ๊ธฐ๊ฐ ์ด๋ ค์ธ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ์ค์ํ ์์น์ธ ์ ๋ณด ์๋์ ์ค์ฒ์ ์ฎ๊ฒผ๋ค. ์นด์ดํฐ์ ๊ตฌํ์ ์จ๊ฒจ์ ํฅํ์ ๋ฎคํ ์ค, ์์์ ๋ณ์, ๋๋ ์กํฐ ์๋ ์ค๋ ๋ ์ ํ์ ์ฌ์ฉํ๋๋ก ๊ทธ๊ฒ์ ๋ฐ๊ฟ ์ ์๋ค.
Last updated