- Process
μ΄μ체μ μμ νλμ μ ν리μΌμ΄μ
- Thread
Process μμ νλμ μμ
μ¬λ¬ Thread λ₯Ό λμμ λ§λ€μ΄ μ€ν(λ³λ ¬μ²λ¦¬)ν μ μλ€.
Java μ κ²½μ° Thread, Runnableλ₯Ό μ΄μ©ν΄μΌ νλ€.
-
λμμ±μ μ±κΈ μ½μ΄μμ λ©ν° μ€λ λλ₯Ό λμμν€κΈ° μν λ°©μ
λ©ν° νμ€νΉμ μν΄ μ¬λ¬ κ°μ μ€λ λκ° λ²κ°μκ°λ©΄μ μ€νλλ μ±μ§μ λ§νλ€.
λμμ±μ μ΄μ©ν μ±κΈ μ½μ΄μ λ©ν° νμ€νΉμ κ° μ€λ λλ€μ΄ λ³λ ¬μ μΌλ‘ μ€νλλ κ²μ²λΌ 보μ΄μ§λ§,
μ¬μ€μ λ²κ°μκ°λ©΄μ μ‘°κΈμ© μ€νλκ³ μλ κ²μ΄λ€. -
λ³λ ¬μ±μ λ©ν° μ½μ΄μμ λ©ν° μ€λ λλ₯Ό λμμν€λ λ°©μ
1 κ° μ΄μμ μ€λ λλ₯Ό ν¬ν¨νλ κ° μ½μ΄λ€μ΄ λμμ μ€νλλ μ±μ§μ λ§νλ€.
λ³λ ¬μ±μ λ³λ ¬μ±(Data Parallelism)κ³Ό μμ λ³λ ¬μ±(Task Parallelism)μΌλ‘ ꡬλΆλλ€.
- μ 체 λ°μ΄ν°λ₯Ό μͺΌκ° μλΈ λ°μ΄ν°λ€λ‘ λ§λ λ€, μλΈ λ°μ΄ν°λ€μ λ³λ ¬ μ²λ¦¬νμ¬ μμ
μ λΉ λ₯΄κ² μννλ κ²μ λ§νλ€.
Java 8μμ μ§μνλ λ³λ ¬ μ€νΈλ¦Ό(Parallelism Stream) μ΄ λ°μ΄ν° λ³λ ¬μ±μ ꡬνν κ²μ΄λ€.
μλΈ λ°μ΄ν°λ λ©ν° μ½μ΄μ μλ§νΌ μͺΌκ°μ΄ κ°κ°μ λ°μ΄ν°λ€μ λΆλ¦¬λ μ€λ λμμ λ³λ ¬ μ²λ¦¬νλ€.
- μλ‘ λ€λ₯Έ μμ
μ λ³λ ¬ μ²λ¦¬νλ κ²μ λ§νλ€.
λνμ μΈ μλ μΉ μλ²κ° μλ€. κ°κ°μ λΈλΌμ°μ μμ μμ²ν λ΄μ©μ κ°λ³ μ€λ λμμ λ³λ ¬λ‘ μ²λ¦¬νλ€.
- κ·Έλ λ€κ³ ν΄μ Thread λ₯Ό κ³μ λλ €κ°λ κ²μ μ’μκ² μλλ€.
- νλμ¨μ΄μ μ νμ μΈ μ¬ν(CPU, Memory λ±)μ΄ μκΈ° λλ¬Έμ κ΄λ¦¬ν νμκ° μλ€.
- κ·Έλμ Thread Pool μ΄λΌλ κ°λ
μ μ΄μ©νλ€.
Thread Pool μ μμ μ²λ¦¬μ μ¬μ©λλ μ€λ λλ₯Ό μ νλ κ°μλ§νΌ μ ν΄ λκ³ ,
μμ ν(Queue)μ λ€μ΄μ€λ μμ λ€μ νλμ© μ€λ λκ° λ§‘μ μ²λ¦¬νλ κ²μ λ§νλ€.
Java μ κ²½μ°, κΈ°λ³Έμ μΌλ‘Executors, ExecutorServiceλ₯Ό μ΄μ©νμ¬ Thread Pool μ λ§λ€ μ μλ€.
ExecutorService executorService = Executors.newSingleThreadExecutor(); - SingleThreadApplication
λ¨μΌ Worker Thread
μ€ν¨ μ, μλ‘μ΄ Thread λ₯Ό μμ±νμ§ μμ
ExecutorService executorService = Executors.newFixedThreadPool(int nThreads);- FixedThreadApplication
κ³ μ λ Worker Thread λ₯Ό μ¬μ©νλ©°, λͺ¨λ Thread λ₯Ό μ¬μ© μ€μ΄λΌλ©΄ Queue μ μμ¬ λκΈ°
μ€ν¨ μ, μλ‘μ΄ Thread λ₯Ό μμ±νμ¬ λ체
ExecutorService executorService = Executors.newCachedThreadPool();- CachedThreadApplication
νμμ λ°λΌ μλ‘μ΄ Thread λ₯Ό μμ±νλ©°, μ΄μ μ μμ±λ Thread κ° μ‘΄μ¬νλ©΄ μ¬μ¬μ©
κΈ°λ³Έμ μΌλ‘ 60μ΄ μ λ Thread μ μ§
λΉλκΈ° μμ μ ν©λ¦¬μ
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(int corePoolSize);- ScheduledThreadApplication
μ§μ λ delay νμ μ€ννκ±°λ, μ£ΌκΈ°μ μΌλ‘ μ€ννλλ‘ λͺ λ Ήμ μμ½
ExecutorService executorService = Executors.newWorkStealingPool(int parallelism);- WorkStealingThreadApplication
Java 8μμ μλ‘ μκΈ΄ Thread Pool
μ§μ λ parallelism μ μ§μν λ§νΌ μΆ©λΆν Thread λ₯Ό μ μ§νκ³ μ¬λ¬ Queue λ₯Ό μ¬μ©νμ¬ κ²½ν©μ μ€μ
Thread λ₯Ό λμ μΌλ‘ λλ¦¬κ³ μ€μ
μμ μ΄ μ€νλλ μμλ₯Ό 보μ₯νμ§ μμ