1. Thread Pool

2. Thread Pool์˜ ๋™์ž‘ ์›๋ฆฌ

3. Thread Pool์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

4. Thread Pool์˜ ๋‹จ์ 

1. Thread Pool

Thread(Click)๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ํ•˜๋‚˜์˜ ํ’€์žฅ์ž„.

์˜ˆ๋ฅผ ๋“ค์–ด ์ „์Ÿ์ด ๋‚˜์„œ ์ถ”๊ฐ€ ๋ณ‘๋ ฅ์˜ ์ง€์› ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ 1๋ช…์”ฉ ์ง€์›ํ•ด์ฃผ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ

๋ฏธ๋ฆฌ ๋ช‡ ๋ฐฑ์˜ ์˜ˆ๋น„๋ณ‘๋ ฅ์„ ์ค€๋น„ํ•ด ์ฆ‰๊ฐ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฑฐ์ž„.

๊ฒฐ๋ก , ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์ ์œผ๋กœ ์šด์˜์ฒด์ œ(OS)๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ 

๊ทธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ Thread์—๊ฒŒ ํ• ๋‹นํ•ด ์คŒ. ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜์ง€๋งŒ

์ƒ์„ฑ / ์ˆ˜๊ฑฐ์— ๋“œ๋Š” ๋น„์šฉ์„ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์Œ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค Thread ์ƒ์„ฑํ•˜๊ณ 

์ผ์„ ๋งˆ์น˜๋ฉด ์ˆ˜๊ฑฐํ•˜๋Š” ์ž‘์—…์€ ํ”„๋กœ๊ทธ๋žจ ํผํฌ๋จผ์Šค์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ.

๋”ฐ๋ผ์„œ Thread๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๋Š” ๊ฑฐ์ž„.

2. Thread Pool์˜ ๋™์ž‘ ์›๋ฆฌ

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์ž‘์—…ํ์— ๋„ฃ์Œ.

Thread Pool์€ ์ž‘์—…ํ์— ๋“ค์–ด์˜จ Task(์ง๋ฌด)๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋†“์€ Thread์—๊ฒŒ ์ผ๊ฐ์„ ํ• ๋‹นํ•จ.

์ผ์„ ๋‹ค ์ฒ˜๋ฆฌํ•œ Thread๋Š” ๋‹ค์‹œ Application์—๊ฒŒ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฆฌํ„ดํ•จ.

Untitled

โ†’ 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 ๋งํฌ ์ฐธ์กฐ**

์“ฐ๋ ˆ๋“œํ’€ ๊ณผ ForkJoinPool