๐ค ์ค๋ ๋๋ฅผ ๋ง์ด ์ธ์๋ก ํญ์ ์ฑ๋ฅ์ด ์ข์์ง๊น?
์ค๋ ๋๋ฅผ ๋ง์ด ์ฐ๋ฉด ์ธ์๋ก ์ฑ๋ฅ์ด ๋์์ง๋๊ฐ
ํ๋ก์ธ์ค์ ์ค๋ ๋๋ฅผ ์ฒ์ ํ์ตํ ๋, ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์ ์กด์ฌํ๋ ์คํ ๋จ์์ด๋ฉฐ, ์ด ์ค๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๋๋ถ์ ์ฐ๋ฆฌ๊ฐ ์์ ์ ๋ค์ผ๋ฉฐ ์น์ํ์ํ๊ฑฐ๋ ํ์ผ์ ๋ค์ด ๋ฐ๋ '๋์ ์์ '์ด ๊ฐ๋ฅํ๋ค๋ผ๊ณ ๋ฐฐ์ ์ ๊ฒ์ด๋ค. ๊ทธ๋์์ธ์ง ์ด๋ฌํ ์ง๋ฌธ์ ๋ํด ๊น๊ฒ ๊ณ ๋ฏผํ ํ์ ์์ด, ์ค๋ ๋๊ฐ ๋ง์ ์๋ก ๋์ ์ฒ๋ฆฌ ์์ ์๊ฐ ์ฆ๊ฐํ๋ ๊ฒ์ด๋, ๋น์ฐํ ๋ฉํฐ ์ค๋ ๋๊ฐ ๋ฌด์กฐ๊ฑด ์ฑ๋ฅ์ด ๋ ์ข๋ค๊ณ ์๊ฐํ ๊ฒ์ด๋ค.
ํ์ง๋ง ๋ชจ๋ ์ํฉ์ ๋ํด ๋ฌด์กฐ๊ฑด ๋ฉํฐ ์ค๋ ๋๊ฐ ์ฑ๊ธ ์ค๋ ๋๋ณด๋ค ๋ฌด์กฐ๊ฑด ์ข๋ค๊ณ ๋งํ ์ ์๋ค. ๋ชจ๋ ๊ธฐ์ ๋ค์๋ ๊ฐ๊ฐ์ ๊ธฐํ๋น์ฉ์ด ์กด์ฌํ๊ณ , ์ฑ๊ธ ์ค๋ ๋์ ๋ฉํฐ ์ค๋ ๋ ์ญ์ ๊ฐ๊ฐ์ ์ฅ์ ์ ๋ง๋ ๊ธฐํ๋น์ฉ๋ค์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋ถ๋ถ์ ์ค๋ ๋๋ฅผ ๊ฒํ๊ธฐ๋ก๋ง ๋ฐฐ์ด ์ง์์๋ฅผ ๊ฑธ๋ฌ๋ด๊ธฐ ์ํด ๊ธฐ์ ๋ฉด์ ์์ ๊ฐ๋ ๋ฑ์ฅํ๋ ๊ณ ์์ค์ ์ง๋ฌธ์ด๊ธฐ๋ ํ๋ค. ๋ง์ผ ๊ธฐ์ ๋ฉด์ ์์ ํด๋น ์ง๋ฌธ์ ๋ฐ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ฌ๋ฌ ๋๋ต๋ค์ด ๋์ฌ์๋ ์๊ฒ ์ง๋ง, ์ด ์ง๋ฌธ์ ์ง์์๊ฐ ์ค๋ ๋์ ์ด๋ ์ ๋๊น์ง ์๊ณ ์๋์ง, ์ด๋ค ๊ด์ ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ณด๋์ง, ์๊ณ ์๋ ์ง์์ ์ ์ ๋ฆฌํด์ ์ฑ๋ฅ๊ณผ ์ฐ๊ฒฐ์ง์ด ํ๋จํ ์ ์๋์ง ์ด๋ฐ ๊ฒ๋ค์ ํ์ธํ๊ธฐ ์ํ ๋ชฉ์ ์ด๋ค. ์ค๋ ๋์ ๋ด๋ถ ๊ตฌ์กฐ๊น์ง ํ์ ํ๊ณ ๋์์ฑ(Concurrency)์ ๋ํ ๊น์ ์ง์์ด ์์ด์ผ๋ง ๋๋ตํ ์ ์๋ ์ง๋ฌธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ง๊ธ๋ถํฐ ์ฑ๊ธ ์ค๋ ๋์ ๋ฉํฐ ์ค๋ ๋ ๋ ๊ฐ์ง ๋ชจ๋ธ์ ๋น๊ตํ๊ณ ์ธ์ ์ด๋๋์ ๋ฌด์์ด ๋ ์ข์์ง ์ ๋ฉํฐ ์ค๋ ๋๊ฐ ํญ์ ์ฑ๋ฅ์ด ์ข์ง ์์์ง์ ๋ํด ์์๋ณด๋๋กํ์.
1. ์๊ณ ์์ญ์ ๋ํ ๋๊ธฐํ ๋น์ฉ
๋ฉํฐ ์ค๋ ๋๋ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ์์ฑ์ ๋นํด ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์์์ ์๋ชจํ๊ณ ์ปจํ ์คํธ ์ค์์นญ๋ ๋ฉํฐ ํ๋ก์ธ์ค์ ๋นํด ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์๊ณ ์์ญ(Critical Section)์ ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋๊ธฐํ(Synchronized) ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
์๊ณ ์์ญ(Critical Section)
๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์๊ณ ์์ญ์ ๊ณต์ ์์์ ์ ๊ทผํ๋ ์ฝ๋ ์์ญ์ ๋งํ๋ค. ๋ํ์ ์ผ๋ก ์ ์ญ ๋ณ์๋ heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ค ์ ์๊ฒ ๋ค.
๋๊ธฐํ ๊ธฐ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ ๋ํ์ ์ธ ๋๊ฐ์ง๋ก ๋ฎคํ ์ค(Mutex) ๋ ์ธ๋งํฌ์ด(Semaphore) ๊ฐ์ ์ ๊ธ ๊ธฐ๋ฒ์ด ์๋ค. ์ด๋ค์ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋๋ก ์ ํํด์ผ ํ์ฌ ๋ฐ์ดํฐ์ ๋ํ ์ผ๊ด์ฑ์ ์ ์งํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ค๋ ๋ ๊ฐ์ ๊ฒฝ์๊ณผ ๋๊ธฐ ์ํฉ์ ๋ฐ์์ํค๋ฏ๋ก, ์คํ๋ ค ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์๋ฅผ๋ค์ด, ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด์ ๊ฐ์ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ ์ ๋ฝ(Lock)์ ํ๋ํ๊ณ , ๋ฐ์ดํฐ์ ์ ๊ทผํ ํ์ ๋ฝ์ ํด์ ํ๋๋ฐ, ์ด๋ฌํ ๋ฝ ํ๋ ๋ฐ ํด์ ์์ ์ ์ถ๊ฐ์ ์ธ ์๊ฐ์ด ์์๋๋ฉฐ, ๋๋จธ์ง ์ค๋ ๋์ ์คํ์ ์ค์งํ๊ฑฐ๋, ๋๊ธฐํ๊ฒ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
๋ํ CPU ์บ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์บ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ฌธ์ ๋ ๋ฐ์ํ ์ ์๋๋ฐ, ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ์ ๋ํด ์์ ์ ๊ฐํ ๋ ํน์ CPU ์ฝ์ด์ ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ค๋ฅธ CPU ์ฝ์ด์ ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ด ๊ฒฝ์ฐ, ๋ค๋ฅธ CPU ์ฝ์ด์์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๊ฐ ํ์ฌ CPU ์ฝ์ด์ ์บ์์ ๋ฐ์๋์ง ์์ ์ํ๋ก ์ฌ์ฉ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, CPU ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค.
์ง๊ธ๊น์ง์ ์๊ธฐ๋ฅผ ์ ๋ฆฌํ์๋ฉด, ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด ๋ง์ ์์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋๊ธฐํ ๋ฐ ์บ์ ์ผ๊ด์ฑ ์์ ์ผ๋ก ์ธํด ๋ณ๋ชฉ์ด ์ผ์ด๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. ๊ทธ๋ผ ๋ฐ๋๋ก ๋ง์ผ ๊ณต์ ๋ฐ์ดํฐ์ ์์ด ์ ๊ณ , CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์ ๊ฒฝ์ฐ ์คํ๋ ค ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด ๋ฉํฐ ์ค๋ ๋๋ณด๋ค ๋ ์ข๋ค๊ณ ํ ์ ์์๊น? ์ด๋ ์์ฃผ ํ๋ฆฐ๋ง์ ์๋์ง๋ง, ์ค์ ๋ก ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์์๋ ๋ง์ ์์ ๋ฐ์ดํฐ์ ๋ณต์กํ ๋ก์ง์ ์ฒ๋ฆฌํด์ผ ํ๊ณ ์์ฆ CPU๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ค ์ฝ์ด๋ฅผ ํ์ฌํ๋ฏ๋ก, ์ด๋ฌํ ๋ณ๋ชฉ ํ์์ด ์๋๋ผ๋ ์ ๋งํ ์ํฉ์์ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋จ๋ณด๋ค ๋น ๋ฅด๋ค. ๊ทธ๋ ์ง๋ง ๋ฉํฐ ์ค๋ ๋๋ผ๊ณ ํด์ ์ฑ๊ธ ์ค๋ ๋๋ณด๋ค ์ฑ๋ฅ ์์น ๊ณก์ ์ด ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๊ฐํ๋ฅด์ง ์๋ค.
2. ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋
์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋(context switching overhead)๋ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์์๋, CPU๊ฐ ํ์ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ก ์ ํ๋ ๋ ๋ฐ์ํ๋ ๋น์ฉ์ ์๋ฏธํ๋ค. ์ด ์ค์์นญ ํ๋ ๊ณผ์ ์์ CPU ์๊ฐ๊ณผ ์์์ ์๋ชจํ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฉํฐ ํ๋ก์ธ์ค ๋์ ๋ฉํฐ ์ค๋ ๋๋ก ํ๋ก๊ทธ๋จ ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ ์ด์ ๋ ํ๋ก์ธ์ค์ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋ ๋ณด๋ค ์ค๋ ๋์ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋๊ฐ ํจ์ฌ ์์ ๋ณ๋ชฉ์ด ์ ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ด๋๊น์ง๋ ํ๋ก์ธ์ค์ ๋นํด ์๋์ ์ผ๋ก ์๋ค๋ ๊ฒ์ด์ง ์ค๋ฒํค๋ ์์ฒด ๋น์ฉ์ ๊ฒฐ์ฝ ๋ฌด์ํ ์๋ ์๋ค.
์ฆ, ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์์๋ ์ค๋ ๋๊ฐ ํ๊ฐ ์ด๋ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋๊ฐ ๋ฐ์๋์ง ์์ง๋ง, ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์ ์ค๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ์ด๋ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ , ์ค๋ ๋๊ฐ ๋ง์ผ๋ฉด ๋ง์ ์๋ก ์ค์์นญ ํ์๋ ๋ง์์ง๊ณ ๋ฉ๋ฌ์ ์ค๋ฒํค๋๋ ๋ง์์ ธ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ํนํ ์ฑ๊ธ ์ฝ์ด์ ๊ฐ์ ์๋ CPU์ ๊ฐ์ด ์ฝ์ด ์๋ ์ ์๋ฐ ์ค๋ ๋ ์๋ฅผ ๊ณ์ ๋๋ฆฌ๊ฒ ๋๋ฉด, ๊ฐ ์ฝ์ด์์ ๊ฒฝํฉํ๋ ์ค๋ ๋ ์๊ฐ ์ ์ ๋ง์์ง ๊ฑฐ๊ณ , ์ด๋ ์๊ฐ์๋ ์ค๋ฒํค๋ ๋๋ฌธ์ ์ฑ๋ฅ ํ๊ณ์ ๋ถ๋ชํ๊ฒ ๋ ์ ์๊ฒ ๋๋ค.
๋ง์ผ ๋จ์ํ CPU๋ง์ ์ฌ์ฉํ๋ ๊ณ์ฐ์์ ์ด๋ผ๋ฉด ์คํ๋ ค ๋ฉํฐ ์ค๋ ๋๋ณด๋ค ์ฑ๊ธ ์ค๋ ๋๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค. ์กฐ๊ธ ๊ทน๋จ์ ์ธ ์๋ฅผ ๋ค์ด๋ณด์๋ฉด, 1๋ถํฐ 1์ต ๊น์ง ๋ง์ ์ ํ๋ ์์ ์ 100๋ฒ ์ํํด์ผ ํ๋ ํ๋ก๊ทธ๋จ์ด ์๋ค๊ณ ํ์. ์ฑ๊ธ ์ค๋ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด for๋ฌธ์ ์ค์ฒฉํจ์ผ๋ก์จ ๊ตฌ์ฑํ ์ ์๊ฒ ๋ค.
long sum = 0;
for(int j=0; j<100; j++) {
for(int i=0; i<10000000; i++) {
sum += i;
}
}
๋ฐ๋ฉด ๋ฉํฐ ์ค๋ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด ์๋์ ์ฝ๋๋ฅผ ๊ฐ๊ฐ์ 100๊ฐ์ ์ค๋ ๋์๊ฒ ๋ถ๋ฐฐํ๊ณ ๋์์ ์คํ์ํค๊ฒ ๋ ๊ฒ์ด๋ค.
long sum = 0;
/* --------- ์ค๋ ๋ 1 --------- */
new Thread(() -> {
for (int i = 0; i < 10000000; i++) {
sum += i;
}
}).start();
/* --------- -------- --------- */
/* --------- ์ค๋ ๋ 2 --------- */
new Thread(() -> {
for (int i = 0; i < 10000000; i++) {
sum += i;
}
}).start();
/* --------- -------- --------- */
// ...
/* --------- ์ค๋ ๋ 100 --------- */
new Thread(() -> {
for (int i = 0; i < 10000000; i++) {
sum += i;
}
}).start();
/* --------- -------- --------- */
์ค์ ๋ก ๊ทธ๋ ์ง๋ ์๊ฒ ์ง๋ง, 1๋ถํฐ 1์ต ๊น์ง ๋ง์ ํ๋๋ฐ 10์ด๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ฉด ์ฑ๊ธ ์ค๋ ๋ ๋ชจ๋ธ์์ 10์ด๊ฐ ๊ฑธ๋ฆฌ๋ ์์ ์ 100๋ฒ ์ง๋ ฌ๋ก ์ํํ์ผ๋ 1000์ด๊ฐ ๊ฑธ๋ฆฌ๊ณ , ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์์ 100๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ์คํํ๋ฏ๋ก 10~11์ด ์ฌ์ด ์ ๋ ๊ฑธ๋ฆด๊ฒ์ด๋ผ๊ณ ์์ ํ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ์ณ์ง ์๋ค. ์๋ํ๋ฉด ๋ฉํฐ ์ค๋ ๋์์ ๋ฐ์ํ๋ context swtiching overhead ๋น์ฉ ๋๋ฌธ์, 100๊ฐ์ ์ค๋ ๋๋ค์ด ์๋ก ์ค์์นญ๋๋ฉด์ ๋ฐ์๋๋ ๋ณ๋ชฉ์ผ๋ก ์ธํด ๋์ ์ฒ๋ฆฌ์ ์ด์ ๋ณด๋ค ์์ ์๊ฐ์ด ํด ์ ์์ผ๋ฏ๋ก ์คํ๋ ค ์ฑ๊ธ ์ค๋ ๋๋ณด๋ค ์ฐ์ฐ ์ฒ๋ฆฌ๊ฐ ๋๋ ค์ ธ ๋ฒ๋ฆด์๊ฐ ์๊ฒ ๋๋ค.
๋ค์ ํ๋ฒ ๋งํ์ง๋ง ์ด๋ ์กฐ๊ธ ๊ทน๋จ์ ์ธ ์์ ์ด๊ธด ํ๋ค. ๋น๋ก ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋์ ์ถ๊ฐ์ ์ธ ๋๊ธฐํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ์ง๋ง, ๋ฉํฐ ์ค๋ ๋๋ CPU ์ฝ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ฃผ ์๋ ์ ์ฑ๊ธ ์ฝ์ด ํ๋ก์ธ์๊ฐ ์๋ ์ด์ ๋ฉํฐ ์ค๋ ๋์ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋์ชฝ์ด ๋ ๋๋ฆฌ๋ค๊ณ ๋จ์ธํ ์๋ ์๋ค. ๋ฐ๋ผ์ ์ด ๋ถ๋ถ์ ๋จ์ง ๋ฉํฐ ์ค๋ ๋ฉ์ ์ ์ฌ์ ์ธ ๋จ์ ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ํน๋ณํ ์ค๊ณ๋ ์์์ด๋ฉฐ, ์ค์ ์๋๋ฆฌ์ค์์๋ ๋ค์ํ ์ํฉ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก ์ฐธ๊ณ ์ ์ ์ํด์ผ ํ๋ค. ๊ธ์ด์ด๊ฐ ๋งํ๊ณ ์ถ์ ๊ฒ์, "์ค๋ ๋๊ฐ ๋ง์์๋ก ์์ ์ ๋ถ๋ฆฌํด์ ๋์์ ์ฒ๋ฆฌํ๋๊น ํญ์ ๋น ๋ฅด๋ค"๋ ๊ณ ์ ๊ด๋ ์ ์ปดํจํฐ๋ฅผ ๋ฐฐ์ด ๋ ์๋ถ๋ค์ด๋ผ๋ฉด ๊นฐ ํ์์ฑ์ด ์๋ค๋ ๊ฒ์ ๊ฐ์กฐํ๊ณ ์ถ์ ์ ์ด๋ค.
3. ์์ฌ ์ค๋ ๋์ ๋ฆฌ์์ค ๋ญ๋น
๋ง์ ์์ ์์ ์ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ก ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ค๋ ๋ฉํฐ ์ค๋ ๋ ์ทจ์ง๋ ์ข์ง๋ง, ํ์ฌ์ ์๋น์ค ์ด์ฉ๋ฅ ์ด 24์๊ฐ ํญ์ ๋ฐ์ ์ํ์ด์ง๋ ์์ ๊ฒ์ด๋ค. ์ฆ, ๋ฉํฐ ์ค๋ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ด์ฉ๋ฅ ์ด ํ์ฐํ์ฌ ์ค๋ ๋๋ฅผ ํ๋๊ฐ ๋ฐ์ ์ด์ฉํ์ง ์์๋, ๋๋จธ์ง ์์ฌ ์ค๋ ๋๋ค์ด CPU, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ๋ฑ์ ์์์ ๋ถํ์ํ๊ฒ ์ ์ ํด์ ์ฑ๋ฅ ์ ํ๋ ์ค๋ฅ์ ์์ธ์ด ๋ ์ ์๊ฒ ๋๋ค. ์ฐ์ ๋๊ณ ์๋ ์ค๋ ๋๊ฐ ๋ง์ ์๋ก ๋ถํ์ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์๋ ์ ์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์์คํ ์์ ๋ญ๋น๊ฐ ๋ฐ์๋๋ค. ๊ทธ๋ฐ๋ฐ ๋๊ณ ์์์๋ CPU๋ ๋ค๋ฅธ ์ค๋ ๋์๊ฒ CPU ์๊ฐ์ ์๋ํ๋๋ก ์ค๊ณ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ธ๋ ์ค๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋ ๊ฐ์ ์ปจํ ์คํธ ์ค์์นญ์ ํ์ฌ CPU์ ํจ์จ์ฑ์ ๋จ์ด๋จ๋ฆฐ๋ค. ์ฆ, ์ค๋ ๋๊ฐ ์์ ์ ์ํํ์ง ์๋๋ผ๋ ์กด์ฌ ์์ฒด๋ง์ผ๋ก ์ฌ์ ํ ๋ฆฌ์์ค๋ฅผ ์๋นํ๊ณ ์ค๋ฒํค๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์์ฌ ์ค๋ ๋์ ๋ฌธ์ ๋ ๊ฒฐ์ฝ ๊ฐ๋ณ์ง ์์ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋, ๋ ธ๋ ์ค๋ ๋์ ๊ฐ์๋ฅผ ์ต์ํํ๊ณ , ์ค๋ ๋ ํ(Thread Pool)๊ณผ ๊ฐ์ ๋งค์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ค๋ ๋์ ๊ฐ์๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ฆฌ์์ค ๋ญ๋น๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
4. ์ดํ๋ฆฌ์ผ์ด์ ์ฑ๊ฒฉ์ ๋ฐ๋ฅธ ์ ์ฝ
"์ค๋ ๋๋ฅผ ๋ง์ด ์ฐ๋ฉด ์ธ์๋ก ๋์์ ๋ ๋ง์ ์์ ๋ค์ ์คํํ ์ ์๋ค"๋ผ๋ ๋ง์๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ฅด๊ฒ ์๋ฌต์ ์ผ๋ก ํด๋น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ ์์ ์์ ๋ค๋ก ์๊ฒ ์ชผ๊ฐ์ ๋์์ ์คํ์ด ๊ฐ๋ฅํ ์ฑ๊ฒฉ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ์ ์ ๋ฅผ ๊น๊ณ ์๊ฐํ๋ค. ์ฆ, ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ชฉ์ ๊ณผ ์ฃผ์ ์ ๋ฐ๋ผ ์ํคํ ์ณ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค๋ ์๊ธฐ์ธ๋ฐ, ์๋ฅผ๋ค์ด ๋ง์ฝ ๊ฐ๋ฐํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์์ด ์์ฐจ์ ์ผ๋ก ์คํ๋ผ์ผ๋ง ํ๋ ํน์ง์ ๊ฐ์ง๊ฑฐ๋ ์๊ฒ ์ชผ๊ฐ์ ๋์์ ์คํํ๊ธฐ์ ๋งค์ฐ ์ด๋ ค์ด ์ฑ๊ฒฉ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ฉด ์คํ๋ ค ๋ฉํฐ ์ค๋ ๋ ๊ตฌ์ฑ์ ๋ณ ์ด์ ์ด ์๋ค๋ ๊ฒ์ด๋ค. ์ด์ ๋ํ ๋ํ์ ์ธ ์์๋ก๋ CPU ๋ฐ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ I/O ๋ฐ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ก ๋ค ์ ์๋ค.
CPU ๋ฐ์ด๋
- CPU ์ฐ์ฐ ๋ฅ๋ ฅ์ ์์กดํ๋ ์์ ์ ๋งํ๋ค
- ๋ฐ์ดํฐ ๋ง์ด๋, ์์ ์ฒ๋ฆฌ ์์ , ์ด๋ฏธ์ง ํ๋ก์ธ์ฑ, ์ํธํํ ๋ง์ด๋ ..๋ฑ
I/O ๋ฐ์ด๋
- I/O ์ฅ์น์ ์๋ต ์๋์ ์์กดํ๋ ์์ ์ ๋งํ๋ค
- ํ์ผ ์ ์ถ๋ ฅ, ๋คํธ์ํฌ ํต์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ..๋ฑ
CPU ๋ฐ์ด๋ ์ดํ๋ฆฌ์ผ์ด์
์ค๋ผํด์์ ์ํคํ ํธ๋ก ์ผํ๊ณ ์๋ Goetz๊ฐ 2002, 2006๋ ์ ๋ฐํํ ์๋ฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ๊ดํ ์ฑ ๊ณผ ๋ ผ๋ฌธ์ ๋ฐ๋ฅด๋ฉด CPU ๋ฐ์ด๋ ์์ ์์ ์ ์ ํ ์ค๋ ๋ ์๋ ์ฝ์ด ์ + 1 ์ด๋ผ๊ณ ์ฃผ์ฅํ์๋ค. ์ด๋ ์์์ ์ดํด๋ณด์๋ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋ ๋น์ฉ ๋๋ฌธ์ด๋ผ๋ ๊ฑธ ์ ์ถํ ์ ์์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ CPU ๋ฐ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ cpu๋ฅผ ๋ง์ด ์ฐ๊ธฐ ๋๋ฌธ์ ์ฝ์ด์์ ๋น์ทํ ์์ค ์ด์์ผ๋ก ์ค๋ ๋ ์๋ฅผ ๋๋ ค๋ดค์ ๋ณ ์ด์ ์ด ์์ผ๋ฉฐ, ์คํ๋ ค ๊ฐ ์ฝ์์ ์ฐ๋ ๋ ์๊ฐ ๋ง์์ง์๋ก ์ปจํ ์คํธ ์ค์์นญ ๋๋ฌธ์ ์ค๋ฒํค๋๋ง ๋ ๋ง์์ ธ์ ์ฑ๋ฅ์ด ์ ์ข์ ์ํฅ์ ์ฃผ๊ฒ ๋๋ค. ๊ทธ๋์ ์ค๋ ๋์ ๊ฐ์๊ฐ ์ ์ ํ๊ฒ ์ค์ ๋์ด์ผ ์ต์ ์ ์ฑ๋ฅ์ ์ป์ ์ ์๋ ๊ฒ์ด๋ค.
I/O ๋ฐ์ด๋ ์ดํ๋ฆฌ์ผ์ด์
ํ์ผ ์ ์ถ๋ ฅ, ๋คํธ์ํฌ ํต์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ์ ๊ฐ์ ์ ์ถ๋ ฅ ์์ ์ด ๋ง์ ๊ฒฝ์ฐ ์ค๋ ๋๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ฌํ ์์ ๋ค์ I/O ์ฅ์น์ ์๋ต ์๋์ ์์กดํ๋ ๊ฒ์ด ํฐ๋ฐ, ์๋ฅผ ๋ค์ด ํ์ผ ์ ์ถ๋ ฅ์ ํ์ผ์ ์ฝ๊ธฐ ์ํด ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋๋ฐ ์์ด ํ๋์จ์ด ํ๊ณ์ ์ ์ถ๋ ฅ ์์ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์๋์ ์ผ๋ก ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ์ด๋ CPU๋ ์ ์ถ๋ ฅ์ด ์๋ฃ๋ ๋๊น์ง ํด๋ฌด ์ํ๊ฐ ๋๋ค. ๊ทธ๋์ ๋ง์ผ ์ฑ๊ธ ์ค๋ ๋์ผ ๊ฒฝ์ฐ I/O ์์ ํ๋ ๋์ ๋ธ๋กํน ๋์ด ์๋์ ๊ฐ์ด ๋ญ๋น๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๋ฉํฐ ์ค๋ ๋๋ I/O ์์ ์ด ์ฒ๋ฆฌ๋ ๋์ ๋ค์์ ์ดํํ ์์ ๋ค์ ๋ค๋ฅธ ์ค๋ ๋์๊ฒ ์์์ ํ ๋นํ์ฌ ์ํํ ์ ์๋๋ก ํ ์ ์๋ค. ๋คํธ์ํฌ ํต์ ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋คํธ์ํฌ ์ํฉ์ ๋ฐ๋ผ ์ ์ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ผ๋ฏ๋ก ํต์ ์ง์ฐ๋์ ์ค๋ ๋๋ฅผ ์ฌํ์ฉ ์ํค๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ I/O ์์ ์ด ๋ง์ ์ํฉ์์๋ CPU ์ฝ์ด ์๋ณด๋ค 2๋ฐฐ 3๋ฐฐ ํน์ ๊ทธ ์ด์์ผ๋ก ์ค๋ ๋ ์๋ฅผ ๋๋ ค์ฃผ๋ ๊ฒ์ด ์ฝ์ด๋ค์ ๋ ํจ์จ์ ์ผ๋ก ์ธ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๋ฉด์์ ์ด์ ์ด ์ป์ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ์์ ๋ฐฐ์ ๋ฏ์ด ์ค๋ ๋๋ฅผ ๋๋ฆฌ๋ฉด ๋๋ฆด์๋ก, ์์ฌ ์ค๋ ๋์ ์ปจํ ์คํธ ์ค๋ฒํค๋์ ๋๊ธฐํ ๋ฑ์ ๋ฌธ์ ์ ์ด ๋๋ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์, I/O ๋ฐ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ ๋์ ๋น๋๊ธฐ I/O ์ฒ๋ฆฌ์ ํนํ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ ๋ชฉํ๊ธฐ๋ ํ๋ค. ๊ฐ์ฅ ๋ํ์ ์ผ๋ก Node.js ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ค ์ ์๋ค.
Node.js์ ๊ฐ์ ์ฑ๊ธ ์ค๋ ๋ + ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์์๋ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ฌ(Event Handler)๋ฅผ ํธ์ถํ์ฌ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ด๋ค. ๋ง์ฝ ์ ์ถ๋ ฅ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋น๋๊ธฐ I/O๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ถ๋ ฅ ์์ ์ ์ํํ๊ณ , ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ๋ธ๋กํนํ์ง ์๊ฒ ๋๋ค. ๊ทธ๋์ ์์ ์ฒ๋ฆฌ ๋์ค ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ด์, ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์ ๋นํด ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ณ ๋์ ์ฒ๋ฆฌ๋์ ๋ณด์ฌ์ค ์ ์๋ค.
๋ฌผ๋ก ๋น๋๊ธฐ I/O ์ฒ๋ฆฌ ์ฃผ์ฒด๋ Node.js์ ๋ด์ฅ๋ libuv ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค๋ ๋ ํ์์ ๊ฐ์ ธ์จ ๋ฉํฐ ์ค๋ ๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์น๋ธ๋ผ์ฐ์ ๋ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด๋ฉฐ ์ด๋ฅผ ์ด์ฉํด ๋น๋๊ธฐ ์์ ์ ์ํํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ๊ณผ ์ฐจ์ด์ ์ด ์๋๊ณ ๋งํ ์ ๋ ์๊ฒ ์ง๋ง, Node.js์ ๋ฉ์ธ ์ค๋ ๋๋ ์ฑ๊ธ ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์์ ๋ฐ์ํ ์ ์๋ ๋๊ธฐํ ๋ฌธ์ ๋ ๊ฒฝ์ ์ํ ๋ฑ์ ๊ฑฑ์ ํ ํ์๊ฐ ์์ด CPU ๋ฐ์ด๋ ํน์ I/O ๋ฐ์ด๋ ์์ ์ด ๋ฐ์ํ๋ฉด ๊ทธ๋์๋ง ๋ฉํฐ ์ค๋ ๋๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํด, ์ด๋ฅธ๋ฐ ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ ๋ณํ ๋ฒ์ ์ธ '์ฑ๊ธ ์ค๋ ๋ + ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ + ๋น๋๊ธฐ I/O ๋ชจ๋ธ' ์ด๋ผ๊ณ ๋งํ๋ค.
GUI ์ดํ๋ฆฌ์ผ์ด์
GUI ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฐฝ(window), ์์ด์ฝ(icon), ๋ฉ๋ด(menu), ํฌ์ธํฐ(pointer) ๋ฑ์ ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI)๋ฅผ ํตํด ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค. ํค๋ณด๋, ๋ง์ฐ์ค, ํฐ์น์คํฌ๋ฆฐ ๋ฑ์ ์ ๋ ฅ ์ฅ์น๋ก๋ถํฐ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ , ์ ์ ํ ๋ฉ์์ง๋ ์ก์ ์ ์ํ ํ๋ค.
์ด๋ฌํ GUI ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ๋ณดํต ์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ์ ์ด๋ค. ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ค๋ ๋ ๊ฐ์ ๋๊ธฐํ ๋ฌธ์ ๋ก ์ธํด ์ด๋ฒคํธ ์ฒ๋ฆฌ ์์๊ฐ ๋ค๋ฐ๋๊ฑฐ๋, ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ด, UI ๊ฐฑ์ ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฒ ๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํด์น๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ฅผ ์ด์ฉํด ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ฑ๊ธ ์ค๋ ๋๋ก ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ ํฉํ๋ค.
5. ํ๋ก๊ทธ๋๋ฐ ๋์ด๋
์ฑ๊ธ ์ค๋ ๋๋ ๋จ ํ๋์ ์ค๋ ๋๊ฐ ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ๊ฐ ๋จ์ํ์ฌ ๊ฐ๋ฐ์ด ๋ ์ฝ๊ณ CPU, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋ค. ๋ฐ๋ฉด ๋ฉํฐ ์ค๋ ๋๋ ์ค๋ ๋ ๊ฐ์ ๋๊ธฐํ ์ฒ๋ฆฌ, ์๋ชป๋ ์ค๋ ๋ ๊ด๋ฆฌ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋์, ๋ฐ๋๋ฝ ๋ฑ์ ๋ฌธ์ ์ ๋ํด ๊ด๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ด ๊ต์ฅํ ๋ณต์กํด์ง๋ค.
๊ธ์ด์ด๊ฐ ๋งํ๊ณ ์ถ์ ๊ฒ์ ๋น์ฐํ ๋์ฒด์ ์ผ๋ก ๋ฉํฐ ์ค๋ ๋๊ฐ ์ฑ๊ธ ์ค๋ ๋ ๋ณด๋ค ์ฑ๋ฅ์ด ๋ ๋ฐ์ด๋์ง๋ง, ๊ทธ๋ ๋ค๊ณ ํด์ ๋ฌดํฑ๋๊ณ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ฌด์์ ๋ฉํฐ ์ค๋ ๋๋ก ์งํํ๋ค ์จ๊ฐ ๋์์ฑ ๋ฌธ์ ์ ์ง๋ฉดํ์ฌ, ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ ํดํ๋ ๊ฒ์ ๋๋ง๋ฆฌ ํ ๋ผ๋ฅผ ๋ชจ๋ ์ก์ผ๋ ค๋ค๊ฐ ํ๋ง๋ฆฌ๋ ๋ชป ์ก๋ ๊ฒฉ์ด ๋์ด ๋ฒ๋ฆด์ ์๋ค๋ ์ ์ด๋ค.
๋ฐ๋ผ์ ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์ ํ๋ก๊ทธ๋๋จธ์๊ฒ ๋์ ์์ค์ ์ญ๋๊ณผ ๊ฒฝํ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ ์ ํ์ ์์ด ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ , ํ๋ก๊ทธ๋จ์ ํน์ฑ๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ ๋ฉํฐ ์ค๋ ๋ฉ ์ ๋ต์ ์ ํํ๊ณ , ์ฑ๋ฅ ์ต์ ํ์ ๋์์ฑ ๊ด๋ จ ์ด์๋ค์ ๋ํ ์ฒ ์ ํ ์ดํด์ ํ์ต์ด ํ์ํด์ง๋ค.
# ์ฐธ๊ณ ์๋ฃ
https://youtu.be/jSaBkvtHhrM
https://www.bryanbraun.com/2012/06/25/multitasking-and-context-switching/
https://www.baeldung.com/java-volatile-variables-thread-safety
https://medium.com/@punyatoya213/multithreading-can-be-fun-too-part-2-e27f1841c8ca
https://medium.com/pocs/single-thread-server-vs-multi-thread-server-c1fda66bbcd0
https://realpython.com/python-concurrency/