๋ค์ค ์ค๋ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ค๋ ๋ ์์ ๊ตฌ์ฑ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ํด์๋ก ๋ค์ค ์ค๋ ๋ ์์ ์ ํ์ํ ์ค๋ ๋๊ฐ ๋ง์์๋ก์คํ ๊ฐ๋ฅ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๊ฐ์ฒด.
์ฌ๊ธฐ์์ Java๋ก ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ค์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ด๋ผ๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ์์ ์ ์ํํ๊ธฐ ์ํด ๋งค๋ฒ ์ค๋ ๋์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ์ฑ๋ฅ์ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ๊ธฐ์ ์ค๋ ๋ ํ ๊ณผ ThreadPoolExecutor๊ฐ ๋์์ด ๋ฉ๋๋ค.
์ค๋ ๋ ํ์ ๋ฏธ๋ฆฌ ์ด๊ธฐํ๋ ์ค๋ ๋ ์งํฉ์ ๋๋ค. ํฌ๊ธฐ๋ ๊ณ ์ ๋๊ฑฐ๋ ๊ฐ๋ณ์ ์ผ ์ ์์ต๋๋ค.
์ค๋ ๋๋ณด๋ค ์์ ์ด ๋ง์ผ๋ฉด ์์ ์ด ์์ ๋๊ธฐ์ด์์ ๋๊ธฐํฉ๋๋ค. ํ์ N๋ฒ์งธ ์ค๋ ๋๋ ๋๊ธฐ์ด์์ ์์ ์ ๊ฐ์ ธ์ค๊ณ ์์ ์ด ์๋ฃ๋ ํ ์ค๋ ๋๋ ๋๊ธฐ์ด์์ ์ ์์ ์ ์ ํํฉ๋๋ค. ๋๊ธฐ์ด์ ๋ชจ๋ ์์ ์ด ์คํ๋๋ฉด ์ค๋ ๋๋ ํ์ฑ ์ํ๋ฅผ ์ ์งํ๊ณ ์ ์์ ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ ์์ ์ด ๋ํ๋๋ฉด ์ค๋ ๋๋ ํด๋น ์์ ์ ์คํํ๊ธฐ ์์ํฉ๋๋ค.
ThreadPoolExecutor
Java 5๋ถํฐ Executor ํ๋ ์์ํฌ๋ ๋ฉํฐ์ค๋ ๋ฉ ์๋ฃจ์ ์ ์ป์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ง์ ๊ตฌ์ฑ ์์๊ฐ ์์ผ๋ฉฐ ๊ทธ ๋ชฉ์ ์ ๋๊ธฐ์ด๊ณผ ์ค๋ ๋ ํ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฒ์ ๋๋ค.
์ฃผ์ ์ธํฐํ์ด์ค๋ Executor ๋ฐ ExecutorService ์ ๋๋ค .
Executor ๋ ๋จ์ผ void execute(Runnable runnable) ๋ฉ์๋๊ฐ ์๋ ์ธํฐํ์ด์ค์ ๋๋ค.
์ด ๋ฉ์๋์ ๊ตฌํ์ ์์ ์ ์ ๋ฌํ ๋ ๋์ค์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค๋ ์ ์ ์์๋์ธ์.
ExecutorService โ Executor ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ฌ ์์ ์คํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์ธํฐํ์ด์ค์ ๋๋ค. ๋ํ ์คํ ์ค์ธ ์์ ์ ์ค๋จํ๊ณ ์ค๋ ๋ ํ์ ์ข ๋ฃํ๋ ๋ฉ์๋๋ ์์ต๋๋ค.
ThreadPoolExecutor๋ Executor ๋ฐ ExecutorService ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ ์์ฑ๊ณผ ์์ ์คํ์ ๋ถ๋ฆฌํฉ๋๋ค. Runnable ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๊ณ ์คํ๊ธฐ๋ก ๋ณด๋ด์ผํฉ๋๋ค๊ทธ๋ฐ ๋ค์ ThreadPoolExecutor ๋ ์์ ์คํ๊ณผ ์ค๋ ๋ ์์ฑ ๋ฐ ์์ ์ ๋ด๋นํฉ๋๋ค.
์คํ์ ์ํด ์์ ์ ๋ณด๋ธ ํ ํ์ ๊ธฐ์กด ์ค๋ ๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ๋ฐ ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ค์ ์ค๋ ๋ ์์ ์ด ์๋ฃ๋๋ฉด ๋ค์ ๊ฐ๋น์ง ์์ง์ ์ํํฉ๋๋ค.
ThreadPoolExecutor ์๋ 4๊ฐ์ ์์ฑ์๊ฐ ์์ต๋๋ค.
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
ThreadPoolExecutor ์์ฑ์ ์๋ ๋ค์ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
corePoolSize | ์ด ๋งค๊ฐ๋ณ์๋ ์คํ๊ธฐ ์๋น์ค๊ฐ ์์๋ ๋ ์ค๋น(์์)๋ ์ค๋ ๋ ์๋ฅผ ๋ํ๋ ๋๋ค. |
์ต๋ ํ ํฌ๊ธฐ | ์คํ๊ธฐ ์๋น์ค๊ฐ ์์ฑํ ์ ์๋ ์ต๋ ์ค๋ ๋ ์์ ๋๋ค. |
keepAliveTime | ์ค๋ ๋ ์๊ฐ ๋ค์๋ณด๋ค ํฐ ๊ฒฝ์ฐ ํด์ ๋ ์ค๋ ๋๊ฐ ์๋ฉธ๋๊ธฐ ์ ์ ๊ณ์ ์ ์ง๋๋ ์๊ฐcorePoolSize. ์๊ฐ ๋จ์๋ ๋ค์ ๋งค๊ฐ๋ณ์์ ์ง์ ๋ฉ๋๋ค. |
๋จ์ | ์๊ฐ ๋จ์(์, ๋ถ, ์ด, ๋ฐ๋ฆฌ์ด ๋ฑ). |
์์ ๋๊ธฐ์ด | ์์ ๋๊ธฐ์ด ๊ตฌํ. |
๋งค๋์ | ์๋ฃํ ์ ์๋ ์์ ์ ๋ํ ํธ๋ค๋ฌ์ ๋๋ค. |
์ค๋ ๋ํฉํ ๋ฆฌ | ์์ฒญ ์ ์ ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ฐ์ฒด์ ๋๋ค. ์ค๋ ๋ ํฉํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก์ด ์ค๋ ๋ ํ๋์จ์ด๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํธ์ถํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ์ค๋ ๋ ํ์ ํด๋์ค, ์ฐ์ ์์ ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
ThreadPoolExecutor ์์ฑ
Executors ์ ํธ๋ฆฌํฐ ํด๋์ค ๋ ThreadPoolExecutor ์์ฑ์ ๋จ์ํํ ์ ์์ต๋๋ค . ์ด ์ ํธ๋ฆฌํฐ ํด๋์ค์ ๋ฉ์๋๋ ๋ค์์ ์ค๋นํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.ThreadPoolExecutor๋ฌผ์ฒด.
newFixedThreadPool โ ๊ณ ์ ๋ ์์ ์ค๋ ๋๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ํ๋ ์์ ์์ ์ ์คํํ๋ ์ค๋ ๋ ํ์ ๋ง๋ญ๋๋ค. |
|
newWorkStealingPool โ ์ค๋ ๋ ์๊ฐ JVM์์ ์ฌ์ฉํ ์ ์๋ ํ๋ก์ธ์ ์ฝ์ด ์์ ๋์ผํ ์ค๋ ๋ ํ์ ๋ง๋ญ๋๋ค. ๊ธฐ๋ณธ ๋์์ฑ ์์ค์ 1์ ๋๋ค. ์ฆ, JVM์์ ์ฌ์ฉํ ์ ์๋ CPU ์ฝ์ด๋งํผ ๋ง์ ์ค๋ ๋๊ฐ ํ์ ์์ฑ๋ฉ๋๋ค. ๋์์ฑ ์์ค์ด 4์ด๋ฉด ์ฝ์ด ์ ๋์ ์ ๋ฌ๋ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. |
|
newSingleThreadExecutor โ ๋ชจ๋ ์์ ์ ์คํํ๋ ๋จ์ผ ์ค๋ ๋๋ก ํ์ ๋ง๋ญ๋๋ค. |
|
newCachedThreadPool โ ํ์์ ๋ฐ๋ผ ์ ์ค๋ ๋๋ฅผ ์์ฑํ์ง๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ด์ ์ ์์ฑ๋ ์ค๋ ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ์ค๋ ๋ ํ์ ์์ฑํฉ๋๋ค. |
|
newScheduledThreadPool โ ์ง์ ๋ ์ง์ฐ ํ ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ ๋ช ๋ น์ ์์ฝํ ์ ์๋ ์ค๋ ๋ ํ์ ๋ง๋ญ๋๋ค. |
|
๋ค์ ๋จ์์์๋ ๊ฐ ์ ํ์ ํ์ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.