ํ๋ก์ธ์ค? ์ค๋ ๋?
https://ybdeveloper.tistory.com/20?category=782261
- ํ๋ก์ธ์ค : ํ๋ก๊ทธ๋จ์ ๋ณต์ฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์์์ ์คํ์ค์ธ ์์ ์ ์๋ฏธ
- ์ค๋ ๋ : ํ๋ก์ธ์ค ๋ด๋ถ์์ ์คํ๋๋ ์ฌ๋ฌ ์์ ๋จ์
- ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์ธ์ค๋ง๋ค ์ต์ 1๊ฐ์ ์ค๋ ๋๋ฅผ ์์ ํ๊ณ ์์ ์) Android์ UI Thread
ํ๋ก์ธ์ค ๊ตฌ์กฐ & ์ค๋ ๋ ๊ตฌ์กฐ
ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ผ๋ฉฐ, ๋ ๋ฆฝ์ ์
- Code : ์ฝ๋ ์์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ (ํ๋ก๊ทธ๋จ ๋ช ๋ น)
- Data : ์ ์ญ๋ณ์, ์ ์ ๋ณ์, ๋ฐฐ์ด (์ด๊ธฐํ ๋ ๋ฐ์ดํฐ)
- Heap : ๋์ ํ ๋น ์ ์ฌ์ฉ (new(), malloc()..)
- Stack : ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฆฌํด ๊ฐ (์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ)
์ค๋ ๋๋ Stack๋ง ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๊ฒ ๋๋ฉฐ, ๋๋จธ์ง ์์ญ์ ์๋ก ๊ณต์
์ ๋ฆฌํ์๋ฉด, ํ๋ก์ธ์ค๋ ์์ ๋ง์ ๊ณ ์ ๊ณต๊ฐ๊ณผ ์์์ ํ ๋น๋ฐ์ ์ฌ์ฉํ๋๋ฐ ๋ฐํด, ์ค๋ ๋๋ ๋ค๋ฅธ ์ค๋ ๋์ Stack์ ์ ์ธํ ๋๋จธ์ง๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํ๋ ์ฐจ์ด๊ฐ ์์
๋ฉํฐ ํ๋ก์ธ์ค & ๋ฉํฐ ์ค๋ ๋
1. ๋ฉํฐ ํ๋ก์ธ์ค
- ํ๋์ ์ปดํจํฐ์ ์ฌ๋ฌ CPU๋ฅผ ์ฅ์ฐฉํ๊ฒ ๋๋ฉด ํ๋ ์ด์์ ํ๋ก์ธ์ค์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ
- OS ์ฐจ์์์ ๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์์ ์ ์
- ๊ฐ๊ฐ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๊ณ ์์ด ์์ ๊ณต์ ๊ฐ ๊น๋ค๋ก์ฐ๋ฉฐ, Context Switching์ผ๋ก ์ธํด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํจ
Context Switching
๋์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ๋ก ์ ํ๋๋ฉฐ ํ์ฌ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ๋๊ธฐํ๊ณ ์๋ ๋ค์ ์๋ฒ์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ํ๋ก ์ ํ๋๋ฉฐ ์ ์ฅ๋์๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ๊ณผ์ ์ ์๋ฏธ
2. ๋ฉํฐ ์ค๋ ๋
- ํ๋์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ , ๊ฐ ์ค๋ ๋๊ฐ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋งํผ ์์ ๊ณต์ ๊ฐ ๊ฐ๋จํจ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋งํผ ์์ ์ ์ด์ง ๋ชปํจ(๋๊ธฐํ ๋ฌธ์ ), ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด์ ์ผ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์
Critical Section
ํ๋์ ์ค๋ ๋๊ฐ ๊ณต์ ๋ฐ์ดํฐ ๊ฐ์ ์ ๊ทผํ๋ ์์ ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ๋ ๋๊ธฐํ ๊ณผ์
์ํธ ๋ฐฐ์ , ์งํ, ํ์ ๋ ๋๊ธฐ๋ฅผ ์ถฉ์กฑํด์ผํจ
Reference