์ด์์ฒด์
ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด์
ํ๋ก์ธ์ค๋ ์์์ ํ ๋น๋ฐ๋ ์์
์ ๋จ์์ด๋ฉฐ, ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์. ์ค๋ ๋๋ ์์์ ๊ณต์ ํ๋ค๋ ์ ์ด ์ฐจ์ด์ ์ด ์์ต๋๋ค.
ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํฉ๋๋ค. ์ค๋ ๋๋ ์คํ ์ ์ด๋ง ๋ถ๋ฆฌํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋นํ์ง๋ง, ์ค๋ ๋๋ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ๊ณ , ํ๋ก์ธ์ค์ ์ฝ๋ / ๋ฐ์ดํฐ / ํ ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ข ๋ ํจ์จ์ ์ผ๋ก ํต์ ํ ์ ์์ต๋๋ค. ๋ํ, ์ปจํ
์คํธ ์ค์์นญ๋ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น์ฐ์ง ์์๋ ๋๋ ์ค๋ ๋ ์ชฝ์ด ๋น ๋ฆ
๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์ค๋ ๋๋ ์์ ๊ณต์ ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ ์ด๋ฅผ ์ผ๋์ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํด์ผํฉ๋๋ค.
ํ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์์ฑํ ์ ์์ต๋๋ค.
์ปจํ ์คํธ ์ค์์นญ์ด๋?
์ปจํ
์คํธ ์ค์์นญ์ ํ Task๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ์์
์ ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ์คํํด์ ๋์์ ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ํ์ฌ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB์ ์ ์ฅํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. ์ด ๋, CPU๋ ์๋ฌด๋ฐ ์ผ์ ํ์ง ์์ผ๋ฏ๋ก ์ฆ์ ์ปจํ
์คํธ ์ค์์นญ์ ์ฑ๋ฅ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
์ค๋ ๋์ ํ๋ก์ธ์ค์ ๋์ ๋ฐฉ์์ด ์ฝ๊ฐ ์์ดํ๋ฐ, ์ค๋ ๋๋ ์บ์๋ฉ๋ชจ๋ฆฌ๋ PCB์ ์ ์ฅํด์ผํ๋ ๋ด์ฉ์ด ์ ๊ณ , ๋น์์ผ ํ๋ ๋ด์ฉ๋ ์ ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋ ๋น ๋ฅธ ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ ์ ์์ต๋๋ค.
๋๊ธฐ์ ๋น๋๊ธฐ์ ์ฐจ์ด(๋ธ๋กํน, ๋๋ธ๋กํน) / ์ฅ๋จ์
๋๊ธฐ / ๋น๋๊ธฐ๋ ๋ ๊ฐ ์ด์์ ๋ฌด์์ธ๊ฐ๊ฐ ์๊ฐ์ ๋ง์ถ๋ค / ์๋ง์ถ๋ค๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๋ฉ์๋ ๋ฆฌํด๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ๋ฐ๋ ์๊ฐ์ด ์ผ์นํ๋ฉด ๋๊ธฐ์ ๋๋ค. ๋, A๊ฐ ๋๋๋ ์๊ฐ๊ณผ B๊ฐ ์์ํ๋ ์๊ฐ์ด ๊ฐ์ผ๋ฉด ๋๊ธฐ์ ๋๋ค.
๋ธ๋กํน / ๋๋ธ๋กํน์ ๋๊ธฐ, ๋น๋๊ธฐ์๋ ๊ด์ ์ ๋๋ค. ๋ด๊ฐ ์ง์ ์ ์ดํ ์ ์๋ ๋์(I/O, ๋ฉํฐ์ค๋ ๋)์ ์๋ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ณดํต ๋น๋๊ธฐ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ ์ฒ๋ฆฌ๊ฐ ํจ๊ป ์ผ์ด๋๊ธฐ ๋๋ฌธ์, CPU ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์์ ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๋ธ๋กํน ๋ฐฉ์์ ๋์์ ์์ ์ด ๋๋ ๋๊น์ง ์ ์ด๊ถ์ ๋์์ด ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ผ๋ธ๋กํน์ ํด๋น ์์ ์๋ฃ ์ฌ๋ถ์ ์๊ด์์ด ์์ ์ ์์ ์ ๊ทธ๋๋ก ์ํํฉ๋๋ค.
๋๊ธฐ ๋ ผ๋ธ๋กํน์ ๊ณ์ํด์ polling์ ์ํํ๊ธฐ ๋๋ฌธ์ ์ปจํ ์คํธ ์ค์์นญ์ด ์ง์์ ์ผ๋ก ๋ฐ์ํด ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค.
๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์ค๋ช
๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋์ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋ง๋ค์ด ์์์ ์์ฑ๊ณผ ๊ด๋ฆฌ์ ์ค๋ณต์ ์ต์ํํ๋ ๊ฒ์ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํฉ๋๋ค.
์ฅ์
- ๋ฉํฐ ํ๋ก์ธ์ค์ ๋นํด ๋ฉ๋ชจ๋ฆฌ ์์ ์๋ชจ๊ฐ ์ค์ด๋ญ๋๋ค.
- ํ ์์ญ์ ํตํด์ ์ค๋ ๋ ๊ฐ ํต์ ์ด ๊ฐ๋ฅํด์ ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ณด๋ค ๋น ๋ฆ ๋๋ค.
- ์ค๋ ๋์ ์ปจํ ์คํธ ์ค์์นญ์ ํ๋ก์ธ์ค์ ์ปจํ ์คํธ ์ค์์นญ๋ณด๋ค ๋น ๋ฆ ๋๋ค.
๋จ์
- ํ ์์ญ์ ์๋ ์์์ ์ฌ์ฉํ ๋๋ ๋๊ธฐํ๋ฅผ ํด์ผํฉ๋๋ค.
- ๋๊ธฐํ๋ฅผ ์ํด์ ๋ฝ์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ํ๋์ ์ค๋ ๋๊ฐ ๋น์ ์์ ์ผ๋ก ๋์ํ๋ฉด ๋ค๋ฅธ ์ค๋ ๋๋ ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
Thread-safe ํ๋ค๋ ์๋ฏธ์ ์ค๊ณ ๋ฐฉ๋ฒ
๋ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ race condition์ ๋ค์ด๊ฐ๊ฑฐ๋ ๊ฐ์ ๊ฐ์ฒด์ ๋์์ ์ ๊ทผํด๋ ์ฐ์ฐ ๊ฒฐ๊ณผ์ ์ ํฉ์ฑ์ด ๋ณด์ฅ๋ ์ ์๊ฒ๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์์ฑ์ด ํ๋ณด๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
- java.util.concurrent ํจํค์ง ํ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ธ์คํด์ค ๋ณ์๋ฅผ ๋์ง ์์ต๋๋ค.
- singleton ํจํด์ ์ฌ์ฉํฉ๋๋ค. (์ด ๋, ์ผ๋ฐ์ ์ผ๋ก ๊ตฌํํ๋ Singleton Pattern์ Thread-safeํ์ง ์์ต๋๋ค.)
- ๋๊ธฐํ ๋ธ๋ญ์์ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
ํ๋ก์ธ์ค ๋๊ธฐํ ?
--
ํ๋ก์ธ์ค๊ฐ ์๋ก ํ๋ ฅํ๋ฉฐ ๊ณต์ ์์์ ์ฌ์ฉํ๋ ์ํฉ์์, ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ํ๋ฉด ๊ณต์ ์์์ ์ ๋ขฐํ ์ ์๊ฒ ๋ง๋ค ์ ์๋๋ฐ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ๋ก์ค์ธ๋ค์ด ๊ณต์ ์์์ ์ฌ์ฉํ ๋ ํน๋ณํ ๊ท์น์ ๋ง๋๋ ๊ฒ
์ด ํ๋ก์ธ์ค ๋๊ธฐํ์
๋๋ค.
- Race Condition (๊ฒฝ์ ์กฐ๊ฑด) : ์ฌ๋ฌ ํ๋ก์ธ์ค (๋๋ ์ค๋ ๋)๊ฐ ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ ๋, ๊ณต์ ์์์ ๋ํ ์ ๊ทผ ์์์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ ์ํฉ์ ๋๋ค.
- Critical Section (์๊ณ ๊ตฌ์ญ) : ์ฌ๋ฌ ํ๋ก์ธ์ค (๋๋ ์ค๋ ๋)๊ฐ ์์์ ๊ณต์ ํ๋ ์ํฉ์์, ํ๋์ ํ๋ก์ธ์ค(์ค๋ ๋)๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ํํด๋ ์ฝ๋ ์์ญ์ ๋๋ค.
์๊ณ ๊ตฌ์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์กฐ๊ฑด(๋ชจ๋ ์ถฉ์กฑํด์ผํจ)
- ์ํธ ๋ฐฐ์ (Mutual Exclusion) : ์ด๋ค ํ๋ก์ธ์ค (๋๋ ์ค๋ ๋)๊ฐ ์๊ณ ๊ตฌ์ญ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์งํ (Progress) : ์๊ณ ๊ตฌ์ญ์์ ์์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด, ์๊ณ ๊ตฌ์ญ์ผ๋ก ์ง์ ํ๋ ค๋ ํ๋ก์ธ์ค ์ค ํ๋๋ฅผ ์ ์ ํ ์ ํํ์ฌ ์๊ฒ ๊ตฌ์ญ์ ์ง์ ํ ์ ์๊ฒ ํด์ผ ํฉ๋๋ค.
- ์ ํ ๋๊ธฐ (Bounded Waiting) : ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๊ธฐ์(Starvation)์ ๋ฐฉ์งํ๊ธฐ ์ํด, ์๊ณ ๊ตฌ์ญ์ ํ ๋ฒ ์ ๊ทผํ๋ ํ๋ก์ธ์ค๋ ๋ค์ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ๋ ์ ํ์ ๋์ด์ผ ํฉ๋๋ค.
๊ต์ฐฉ์ํ์ ๊ธฐ์ ์ํ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ต์ฐฉ์ํ(DeadLock)๋ ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์๋ก ์ ์ ํ๊ณ ์๋ ์์์ ๋ฐ๋ฉ์ ๋๊ธฐํ๊ณ ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ฐ์ ์กฐ๊ฑด
- ์ํธ ๋ฐฐ์ : ํ ๋ฒ์ ํ ํ๋ก์ธ์ค๋ง ํด๋น ์์์ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์ ์ ๋๊ธฐ : ํ ๋น๋ ์์์ ๊ฐ์ง ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ๋น์ ์ : ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์์ ์ฌ์ฉ์ ๋๋ ๋๊น์ง ์์์ ๋บ์ ์ ์์ต๋๋ค.
- ์ํ๋๊ธฐ : ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ํ์ ์ผ๋ก ๋ค์ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์๋ฐฉ : 4๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ๋ง์กฑ๋์ง ์๋๋ก ํฉ๋๋ค.
- ํํผ : ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋๋ก ํฉ๋๋ค.
- ํ๋ณต : ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ๋, ํด๊ฒฐํฉ๋๋ค.
- ๋ฌด์ : ํ๋ณต ๊ณผ์ ์ ์ฑ๋ฅ์ ํ๊ฐ ์ฌํ๋ค๋ฉด ๊ทธ๋ฅ ๋ฌด์ํฉ๋๋ค.
๊ธฐ์ ์ํ(Starvation)์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋ถ์กฑํ ์์์ ์ ์ ํ๊ธฐ ์ํด ๊ฒฝ์ํ ๋, ํน์ ํ๋ก์ธ์ค๊ฐ ์์ํ ์์ ํ ๋น์ด ๋์ง ์๋ ๊ฒฝ์ฐ์ ๋๋ค.
์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. (์ฐ์ ์์๋ฅผ ์์๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ์ค๋ ๊ธฐ๋ค๋ฆฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋์ฌ์ฃผ๊ฑฐ๋, ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.)
์ธ๋งํฌ์ด์ ๋ฎคํ ์ค์ ์ฐจ์ด
์ธ๋งํฌ์ด๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ ์์์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๊ณ , ๋ฎคํ ์ค๊ฐ ๋ ์ ์์ง๋ง, ๋ฎคํ ์ค๋ ํ ๋ฒ์ ํ ๊ฐ์ ํ๋ก์ธ์ค๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด๊ฐ ๋ ์ ์์ต๋๋ค.
๋, ์ธ๋งํฌ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ธ๋งํฌ์ดใน๋ฅผ ํด์ ํ ์ ์์ง๋ง, ๋ฎคํ ์ค๋ ๋ฝ์ ํ๋ํ ํ๋ก์ธ์ค๋ง ๋ฝ์ ๋ฐํํ ์ ์์ต๋๋ค.
'์ทจ๋ฝ๊ธฐ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฐ์ํ ํ ํฌ์ฝ์ค ๋ฐฑ์๋ 5๊ธฐ] ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ ํ๊ณ (1) | 2022.11.03 |
---|---|
๋ฉด์ ๋ณต๊ธฐ - 2 ๐ (0) | 2022.11.03 |
๋ฉด์ ๋ณต๊ธฐ - 1 ๐ญ (0) | 2022.09.27 |
๋ฉด์ ์ค๋น - 1 (0) | 2022.09.19 |
REST .... ? (0) | 2022.09.19 |