1. Thread Pool
Thread(Click)๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ํ๋์ ํ์ฅ์.
์๋ฅผ ๋ค์ด ์ ์์ด ๋์ ์ถ๊ฐ ๋ณ๋ ฅ์ ์ง์ ์์ฒญ์ ๋ฐ์ ๋ 1๋ช ์ฉ ์ง์ํด์ฃผ๋ ๊ฒ ์๋๋ผ
๋ฏธ๋ฆฌ ๋ช ๋ฐฑ์ ์๋น๋ณ๋ ฅ์ ์ค๋นํด ์ฆ๊ฐ ๋์ํ ์ ์๋๋ก ํ๋ ๊ฑฐ์.
๊ฒฐ๋ก , ์ปดํจํฐ ๋ด๋ถ์ ์ผ๋ก ์ด์์ฒด์ (OS)๊ฐ ์์ฒญ์ ๋ฐ์๋ค์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ
๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ Thread์๊ฒ ํ ๋นํด ์ค. ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋์ง๋ง
์์ฑ / ์๊ฑฐ์ ๋๋ ๋น์ฉ์ ๋ฌด์ํ ์ ์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค Thread ์์ฑํ๊ณ
์ผ์ ๋ง์น๋ฉด ์๊ฑฐํ๋ ์์ ์ ํ๋ก๊ทธ๋จ ํผํฌ๋จผ์ค์ ์ํฅ์ ์ค ์ ์์.
๋ฐ๋ผ์ Thread๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๋ ๊ฑฐ์.
2. Thread Pool์ ๋์ ์๋ฆฌ
์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์๋ก๋ถํฐ ๋ค์ด์จ ์์ฒญ์ ์์ ํ์ ๋ฃ์.
Thread Pool์ ์์ ํ์ ๋ค์ด์จ Task(์ง๋ฌด)๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด ๋์ Thread์๊ฒ ์ผ๊ฐ์ ํ ๋นํจ.
์ผ์ ๋ค ์ฒ๋ฆฌํ Thread๋ ๋ค์ Application์๊ฒ ๊ฒฐ๊ณผ๊ฐ์ ๋ฆฌํดํจ.
โ Java์์๋ Thread Pool์ ์์ฑํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก java.util.concurrent Package์์
โ ExecutorService ์ธํฐํ์ด์ค์ Executors Class๋ฅผ ์ ๊ณตํ๊ณ ์์.
โ Executors(Click)์ ๋ค์ํ ์ ์ ๋ฉ์๋๋ฅผ ํตํด ExecutorService ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์
โ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ทธ๊ฒ์ด ๋ฐ๋ก Thread Pool์.
3. Thread Pool์ ์ฌ์ฉํ๋ ์ด์
3-1) ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด
๋งค๋ฒ ๋ฐ์๋๋ ์์ ์ ๋ณ๋ ฌ์ฒ๋ฆฌํ๊ธฐ ์ํด Thread๋ฅผ ์์ฑ/์๊ฑฐํ๋๋ฐ
๋ฐ๋ฅธ ๋ถ๋ด์ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ธ ํผํฌ๋จผ์ค ์ ํ์ํด.
๋ฐ๋ผ์ Thread Pool์ ๋ง๋ค์ด ๋์.
3-2) ๋ค์์ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด
์๋น์ค์ ์ธ ์ธก๋ฉด์ผ๋ก ๋ฐ๋ผ๋ณผ ๋ ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ค์ํจ.
๋ค์์ ์ฌ์ฉ์์ ์์ฒญ์ ์์ฉํ๊ณ , ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ๋์ํ๊ธฐ ์ํด
Thread Pool์ ์ฌ์ฉํจ.
4. Thread Pool์ ๋จ์
4-1) ๋ง์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น
๋ง์ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์์ํด์ 1์ต๊ฐ์ Thread๋ฅผ ๋ง๋ค์ด ๋์๋ค๊ณ ํ๋ฉด
์ค์ ๋ก 100๊ฐ ์ ๋์ ์์ฒญ๊ณผ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ํ์.
๊ทธ๋ ๋ค๋ฉด ๋๋จธ์ง๋ Thread๋ ์๋ฌด์ผ๋ ํ์ง ์๊ณ
๋ฉ๋ชจ๋ฆฌ๋ง ์ฐจ์งํ๋ ์ต์ ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์๋ ์ ์์.
4-2) ๋ ธ๋ Thread ๋ฐ์
1๋ฒ๊ณผ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ค๋ฆ. ์๋ฅผ ๋ค์ด A, B, C Thread 3๊ฐ๊ฐ ์๋๋ฐ
๋ณ๋ ฌ์ ์ผ๋ก ์ผ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ A, B, C ์์ ์๋ฃ ์์์๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ Thread ํด์์๊ฐ
์ฆ, A Thrad๋ ์์ง ์ผ์ด ๋ง์์ ํ๋์ด๊ณ ์๋๋ฐ B, C๋ ์ผ์ ๋คํ๊ณ
A๊ฐ ์ด์ฌํ ์ผํ๋ ๊ฒ์ ๋ณด๊ณ ๋๊ณ ๋ง ์๋ ์ ํด์๊ฐ์ด ๋ฐ์๋จ.
Java์์๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด forkJoinPool์ ์ง์ํจ.
*** forkJoinPool ๋งํฌ ์ฐธ์กฐ**