1์ฅ ๋ฉํฐ ์ค๋ ๋ฉ
๊ฒ์ ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ํ์ฐ์ ์ผ๋ก ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฒ ๋๋ค.
์ฑ๊ธ ์ค๋ ๋๋ก๋ง ์๋ํ๋ ๋น๋๊ธฐ ํจ์ ์ฝ๋ฐฑ์ด๋ ์ฝ๋ฃจํด์ ์ฐ๋๋ผ๋
๋ฉํฐ ์ค๋ ๋ฉ์ ์ดํดํ๊ณ ์๋ค๋ฉด ๋์ฑ ์ ์ฉํ๋ค.
1. ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค
์ฐ๋ฆฌ๊ฐ ํํ ๋งํ๋ ํ๋ก๊ทธ๋จ์ด๋ ์ปดํจํฐ์์ ์คํ๋๋ ๋ช ๋ น์ด ๋ชจ์์ด ๋ค์ด์๋ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
- ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ๋ ์ฝ๋(code)์ ๋ฐ์ดํฐ(data)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ํ๋ก๊ทธ๋จ์ ๋์คํฌ ๊ฐ์ ์ ์ฅ์์ ์กด์ฌํ๋ค.
ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๋ช ๋ น์ด๊ฐ ํ ์ค์ฉ ์คํ๋๋ฉด์ ํ๋ก๊ทธ๋จ์ ๋ญ๊ฐ ํ๋์ ํ๋ ์ํ๊ฐ ๋๋ค.
- ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์์ ๋ก๋ฉ๋ ์ฝ๋์ ๋ฐ์ดํฐ, ํ(heap), ์คํ(stack)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์คํ์๋ ํ์ฌ ์คํ ์ค์ธ ํจ์๋ค์ ํธ์ถ ๊ธฐ๋ก๊ณผ ์ฌ์ฉ ์ค์ธ ๋ก์ปฌ ๋ณ์๋ค์ด ๋ค์ด์๋ค.
- ํ๋ก์ธ์ค๋ RAM ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ค.
์ด๋ฌํ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ๊ฐ ์คํ๋๊ณ ์๋ ๊ฒ์ ๋ฉํฐ ํ๋ก์ธ์ฑ(multi-processing)์ด๋ผ ํ๋ค. ๊ฐ ํ๋ก์ธ์ค์๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์์ผ๋ฉฐ ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์๋๋ฐฉ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฝ๊ณ ์ธ ์ ์๋ค.
2. ์ค๋ ๋
์ค๋ ๋ ์ญ์ ํ๋ก์ธ์ค์ฒ๋ผ ๋ช ๋ น์ด๋ฅผ ํ ์ค์ฉ ์คํํ๋ ๊ธฐ๋ณธ ๋จ์์ด๋ค.
- ํ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์๋ค.
- ํ ํ๋ก์ธ์ค ์์ ์๋ ์ค๋ ๋๋ ํ๋ก์ธ์ค ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค.
- ๊ฐ ์ค๋ ๋๋ง๋ค ์คํ์ ๊ฐ์ง๋๋ฐ, ์ด๋ ์ค๋ ๋๋ง๋ค ์คํ๋๋ ํจ์์ ๋ก์ปฌ ๋ณ์๋ค์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ๊ธฐ๋ณธ์ผ๋ก ์กด์ฌํ๋ ์ค๋ ๋๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ผ ํ๋ค. ์ด๋ฌํ ์ค๋ ๋๊ฐ ํ๋๋ง ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด๋ผํ๋ฉฐ ์ฑ๊ธ ์ค๋ ๋๋ก๋ง ์๋ํ๋๋ก ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ๊ฒ์ ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์ด๋ผ ํ๋ค.
ํ๋ก์ธ์ค ์์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์์ฑ์ํฌ ์๋ ์๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ฌ๋ฌ ์ผ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ฉํฐ ์ค๋ ๋ฉ์ด๋ผ ํ๋ค.
๋ฉํฐ ์ค๋ ๋ฉ์ ์ด๋ป๊ฒ ๊ตฌํ๋ ๊น?
์ผ๋จ ํธ์ถ ์คํ์ ๋จผ์ ์์์ผ ํ๋ค. ํ๋ก๊ทธ๋จ์ ๋ฉ์ธ ํจ์๋ฅผ ์์์ ์ผ๋ก ๋ง์ ํจ์๊ฐ ์คํ๋๋ฉฐ ๊ทธ ํจ์๋ค์ ๋ ๋ค๋ฅธ ํจ์๋ค์ ์คํํ๋ค. ํจ์๋ ์คํ์ด ๋๋๋ฉด ์์ ์ ํธ์ถํ๋ ์ง์ ์ผ๋ก ๋๋์๊ฐ์ผ ํ๋๋ฐ, ์ด ์ ๋ณด๊ฐ ์ ์ฅ๋ ๊ณณ์ ํธ์ถ ์คํ์ด๋ผ ํ๋ฉฐ ์์๋ ๊ฐ ํจ์ ์์ ์ ์ธ๋ ์ง์ญ ๋ณ์๋ ๊ฐ์ด ๋ค์ด์๋ค.
์ค๋ ๋๋ ์คํ ์ง์ ์ด ์๋ก ๋ค๋ฅผ ์ ๋ฐ์ ์๋ค. ์๋ํ๋ฉด ์ค๋ ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ์ด์์ฒด์ ๋ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์ค๋ ๋ ์์ฑ์ฉ ํจ์๋ฅผ ํธ์ถํ๊ณ ํจ์ ์ธ์๋ก ์ค๋ ๋๊ฐ ์ต์ด๋ก ์คํํ ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฃ์ด์ค๋ค. ์ด๋, ํจ์ ์ธ์์ ๋ฐ๋ผ ๊ฐ ์ค๋ ๋์ ์คํ ์ง์ ์ด ์๋ก ๋ฌ๋ผ์ง๋ฉฐ ๊ฐ์ ํจ์๋ฅผ ์คํํ๋ค ํ๋๋ผ๋ ์ธ์๋ ๋ฉ๋ชจ๋ฆฌ ์ํ ๋ฑ์ด ๋ค๋ฅด๋ฏ๋ก ๊ฒฐ๊ตญ ๋ค๋ฅธ ์คํ ์ง์ ์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
๋ฐ๋ผ์ ๊ฐ ์ค๋ ๋๋ง๋ค ๋ค๋ฅธ ์คํ ์ง์ ์ ์ ์ฅํ๊ธฐ ์ํด ํธ์ถ ์คํ์ ๋ฐ๋ก ์ ์ฅํด์ผ ํ๋ค.
์๋ ์ฝ๋๋ ๋ฉ์ธ ์ค๋ ๋์ ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋์์ ์๋ํ๋ ์์ ํ๋ก๊ทธ๋จ์ด๋ค.
- ํ๋ก๊ทธ๋จ์ด ์คํํ๋ฉด, ๋ฉ์ธ ์ค๋ ๋์ ์คํ ์ง์ ์ โ ๋ถํฐ ์์ํ๋ค.
- CreateThread()๋ ์๋ก์ด ์ค๋ ๋ ํ๋๋ฅผ ์์ฑํ๋๋ฐ, ๋งค๊ฐ๋ณ์๋ก ๋ค๋ฅธ ํจ์์ ๊ทธ ํจ์๊ฐ ๋ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์๊ตฌํ๋ค.
- ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ค์ ์ผ์ ์ฒ๋ฆฌํ๋ ๋์ ์ค๋ ๋ 1๋ ํจ์๋ฅผ ์คํํ๋ค. (์ด๋ค ๊ฒ์ด ๋จผ์ ์คํ๋ ์ง๋ ๋ชจ๋ฅธ๋ค.)
- Join()์ ํด๋น ์ค๋ ๋์ ์ผ์ด ๋๋ ๋๊น์ง ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ค. (๋ฉ์ธ ์ค๋ ๋๊ฐ ๋จผ์ ์ข ๋ฃ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.)
- ์ค๋ ๋ 1์ ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์ค๋ ๋ 1์ ์๋ฉธ๋๊ณ ๋ฉ์ธ ์ค๋ ๋๋ ๋ค์ ๊นจ์ด๋๊ฒ ๋๋ค.
- ์คํ๋ ํ๋ก์ธ์ค ์์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋์์ผ๋ฏ๋ก ํ๋ก์ธ์ค ์์ฒด๊ฐ ์ข ๋ฃํ๋ค.
์ ์ฝ๋๋ฅผ ์คํํ๋ ๋์ ์ค๋ ๋๋ ์๋์ ๊ฐ์ ์ํ๋ฅผ ๊ฐ๋๋ค.
3. ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ธ์ ํด์ผ ํ ๊น?
๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ฉํ๊ฒ ๋๋ฉด ์คํ๋ ค ๋นํจ์จ์ ์ธ ํ๋ก๊ทธ๋จ์ด ๋ ์ ์๋ค. ๋ฟ๋ง ์๋๋ผ ์กฐ๊ธ๋ง ์ค์ํด๋ ์ฌ๊ฐํ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ฉฐ ์ฌ์ง์ด ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ ํ๋ค ๋๋ ๋ง๋ค.
- ์ค๋ ๊ฑธ๋ฆฌ๋ ์ผ ํ๋์ ๋นจ๋ฆฌ ๋๋๋ ์ผ ์ฌ๋ฟ์ ๊ฐ์ด ํด์ผ ํ ๋: ๊ฒ์ ๋ก๋ฉ์ ํ๋ ๋์ ์ฌ์ฉ์์ ์ง๋ฃจํจ์ ๋๊ธฐ ์ํด ๊ทธ๋ํ๋ ์ ๋๋ฉ์ด์ ๋ฑ์ ๋ณด์ฌ์ค ์ ์๋ค.
- ์ด๋ค ๊ธด ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ ๋์ ๋ค๋ฅธ ์งง์ ์ผ์ ์ฒ๋ฆฌํด์ผ ํ ๋: ํ๋ ์ด์ด์ ์ ๋ณด๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋ ค๊ณ ๋์คํฌ๋ฅผ ์ก์ธ์ค ํ๋ ๊ฒฝ์ฐ ํด๋น ์ค๋ ๋๋ ๋์คํฌ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ์ด๋, ๋ค๋ฅธ ํ๋ ์ด์ด์๊ฒ ๋ถ๋ฐฐํ๋ฉด ์๋ฒ์ ์คํ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
- ๊ธฐ๊ธฐ์ ์๋ CPU๋ฅผ ๋ชจ๋ ํ์ฉํด์ผ ํ ๋: ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ ๋๋ ํ๋์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด 8์ฝ์ด CPU์์ ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ ๋ค๋ฉด, ์๋ฒ๋ ์ ์ฒด ์ฐ์ฐ ์ฑ๋ฅ์ 1/8๋ง ์ฌ์ฉํ ๊ฒ์ด๋ค.
4. ์ค๋ ๋ ์ ์ฒด
CPU๊ฐ ํ๋๋ง ์๋ ๊ธฐ๊ธฐ๋ผ๊ณ ๊ฐ์ ํ ๋ ์ด๋ป๊ฒ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํ์ํฌ ์ ์์๊น?
์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ฅผ ๋์์ ์คํํด์ผ ํ๋ ์ด์์ฒด์ ๋ ์ค๋ ๋๋ค์ ์ผ์ ์๊ฐ๋ง๋ค ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์คํํ๋ค.
๊ฐ ์ค๋ ๋๋ฅผ ์คํํ๋ค ๋ง๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ก ์ด๋ํ๋ ๊ณผ์ ์ ์ปจํ ์คํธ ์ค์์น(context switch)๋ผ ํ๋ค.
- CPU์ ์ค๋ ๋์ ๊ฐ์๊ฐ ๊ฐ๊ฑฐ๋ ์ค๋ ๋์ ๊ฐ์๊ฐ ์ ์ผ๋ฉด ์ปจํ ์คํธ ์ค์์น๋ฅผ ํ ํ์๊ฐ ์๋ค.
์ปจํ ์คํธ ์ค์์น๋ฅผ ํ๋ ๊ณผ์ ์ ์ ์ง ์์ ์ฐ์ฐ์ ๋ฐ์์ํค๋๋ฐ, ์คํ ์ค์ด๋ ์ค๋ ๋์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์คํํ ์ค๋ ๋์ ์ํ๋ฅผ ๋ณต์ํ๊ณ ๊ทธ ์ง์ ์ผ๋ก ์ด๋ํด์ผ ํ๋ค. ๊ทธ๋์ ์ปจํ ์คํธ ์์น๋ฅผ ๋๋ฌด ์์ฃผ ํ๊ฒ ๋๋ฉด ์ ์ ์ค๋ ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์๊ฐ๋ณด๋ค ์ด๋ํ๋ ์๊ฐ์ด ๋ ๋ง์์ง๊ฒ ๋์ด ๋นํจ์จ์ ์ด๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ปจํ ์คํธ ์ค์์น ํ์๋ฅผ ์ต๋๋ก ์ค์ด๋ฉด ๋์ง ์์๊น?
ํ์ง๋ง ์ด๊ฒ๋ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ก๋ฉ ์ค ์ ๋๋ฉ์ด์ ์ด ๋ณด์ด๋ ๊ฒฝ์ฐ, ์ ๋๋ฉ์ด์ ์ด ๋๊ฒจ ๋ณด์ด๊ฒ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ปจํ ์คํธ ์ค์์น ์คํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ ์ ์ฅ์์ ์พ์ ํ ์ ์๋ ๊ฐ๊ธ์ ๊ธด ์๊ฐ ๋จ์๋ก ์ด๋ฃจ์ด์ง๋ค.
์ด ์๊ฐ ๋จ์๋ฅผ ํ์ ์ฌ๋ผ์ด์ค(time slice)๋ผ๊ณ ํ๋ค. (์ฌ๋ ์ ์ฅ์์๋ ์งง์ง๋ง, ์ปดํจํฐ ์ ์ฅ์์๋ ๊ธด ์๊ฐ์ด๋ค.)
5. ์ค๋ ๋๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ์ ์ฌํญ
์ปดํจํฐ๊ฐ ์คํํ๋ ๋ช ๋ น์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๊ณ์ด ๋ช ๋ น์ด ๋จ์๋ก ์คํ๋๋ค. ์ปจํ ์คํธ ์ค์์น๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ๊ณ์ด ๋ช ๋ น์ด ๋จ์๋ก ์ผ์ด๋๋ฉฐ ํ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ฅผ ๋ค ์คํํ๊ณ ๋๋ฉด ์ปจํ ์คํธ ์ค์์น๋ฅผ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ํ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ๊ตฌ๋ฌธ์ ์ค์ ๋ก ์ฌ๋ฌ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ก ์ปดํ์ผํ๋ค.
์์ค์ ํ ์ค ๊ตฌ๋ฌธ ์์ ์๋ ๊ฒ์ ์คํํ๋ค ๋ง๊ณ ์ปจํ ์คํธ ์ค์์น๋ฅผ ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ์ค๋ ๋ 2๊ฐ๊ฐ ํ๋์ ๊ฐ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด์.
๋ ์ค๋ ๋๊ฐ ํ ๊ฐ์ ์ ๊ทผํ๋ ๊ฒ์ ํน๋ณํ ์กฐ์น๋ฅผ ํ์ง ์์ผ๋ฉด ๊ทธ ๊ฐ์ ์ด๋ค ์ํ๊ฐ ๋ ์ง ์๋ฌด๋ ๋ชจ๋ฅด๊ฒ ๋๋ค.
์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํด์ ๊ทธ ๋ฐ์ดํฐ ์ํ๋ฅผ ์์ธกํ ์ ์๊ฒ ํ๋ ๊ฒ์ ๊ฒฝ์ ์ํ ํน์ ๋ฐ์ดํฐ ๋ ์ด์ค๋ผ ํ๋ค.
- ์์์ฑ(atomicity): ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ค๋ ๋๊ฐ ์ ๊ทผํ๊ณ ์์ ๋ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ฐ๊พธ๋ ์ง, ์๋๋ฉด ํ๋๋ ๋ฐ๊พธ์ง ์๋ ์ง ํด์ผ ํ๋ค.
- ์ผ๊ด์ฑ(consistency): ๋ฐ์ดํฐ๋ฅผ ํญ์ ์ผ๊ด์ฑ ์๋ ์ํ๋ก ์ ์งํด์ผ ํ๋ค.
์์์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋๊ธฐํ(synchronize)๊ฐ ํ์ํ๋ฉฐ ๋ํ์ ์ผ๋ก ์๊ณ ์์ญ, ๋ฎคํ ์ค(์ํธ ๋ฐฐ์ ), ์ ๊ธ(lock) ๊ธฐ๋ฒ์ด ์๋ค.