νλ‘μΈμ€μ μ€λ λ
νλ‘μΈμ€(process)λ κ°λ¨ν λ§ν΄μ 'μ€ν μ€μΈ νλ‘κ·Έλ¨'μ΄λ€. νλ‘κ·Έλ¨μ μ€ννλ©΄ OSλ‘λΆν° μ€νμ νμν μμ(λ©λͺ¨λ¦¬)λ₯Ό ν λΉλ°μ νλ‘μΈμ€κ° λλ€.


νλ‘μΈμ€λ νλ‘κ·Έλ¨μ μννλ λ° νμν λ°μ΄ν°μ λ©λͺ¨λ¦¬ λ±μ μμ κ·Έλ¦¬κ³ μ€λ λλ‘ κ΅¬μ±λμ΄ μμΌλ©°, νλ‘μΈμ€μ μμμ μ΄μ©ν΄μ μ€μ λ‘ μμ μ μννλ κ²μ΄ λ°λ‘ μ€λ λμ΄λ€.
κ·Έλμ λͺ¨λ νλ‘μΈμ€μλ μ΅μν νλ μ΄μμ μ€λ λκ° μ‘΄μ¬νλ©°, λ μ΄μμ μ€λ λλ₯Ό κ°μ§ νλ‘μΈμ€λ₯Ό 'λ©ν°μ€λ λ νλ‘μΈμ€(multi-threaded process)'λΌκ³ νλ€.
νλμ νλ‘μΈμ€κ° κ°μ§ μ μλ μ€λ λμ κ°μλ μ νλμ΄ μμ§ μμΌλ μ€λ λκ° μμ μ μννλλ° κ°λ³μ μΈ λ©λͺ¨λ¦¬ 곡κ°(νΈμΆμ€ν)μ νμλ‘ νκΈ° λλ¬Έμ νλ‘μΈμ€μ λ©λͺ¨λ¦¬ νκ³μ λ°λΌ μμ±ν μ μλ μ€λ λμ μκ° κ²°μ λλ€.
λ©ν°νμ€νΉκ³Ό λ©ν°μ€λ λ©, κ·Έλ¦¬κ³ λ©ν°νλ‘μΈμ±
λ©ν°νμ€νΉ : μ¬λ¬ κ°μ νλ‘μΈμ€κ°λ₯Ό λμμ μ€νμν¬ μ μλ μμ€ν
- νμ¬ μ°λ¦¬κ° μ¬μ©νκ³ μλ μλμ°λ μ λμ€λ₯Ό ν¬ν¨ν λλΆλΆμ OSλ λ©ν°νμ€νΉ(multi-tasking, λ€μ€μμ )μ μ§μνκΈ° λλ¬Έμ μ¬λ¬ κ°μ νλ‘μΈμ€κ° λμμ μ€νλ μ μλ€.
λ©ν°μ€λ λ© : νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ μ°λ λκ° λμμ μμ μ μννλ κ²
- CPUμ μ½μ΄κ° ν λ²μ λ¨ νλμ μμ λ§ μνν μ μμΌλ―λ‘, μ€μ λ‘ λμμ μ²λ¦¬λλ μμ μ κ°μλ μ½μ΄μ κ°μμ μΌμΉνλ€. κ·Έλ μ§λ§ μ²λ¦¬ν΄μΌνλ μ°λ λμ μλ μΈμ λ μ½μ΄μ κ°μλ³΄λ€ ν¨μ¬ λ§κΈ° λλ¬Έμ κ° μ½μ΄κ° μμ£Ό μ§§μ μκ° λμ μ¬λ¬ μμ μ λ²κ°μ κ°λ©΄ μνν¨μΌλ‘μ¨ μ¬λ¬ μμ λ€μ΄ λͺ¨λ λμμ μνλλ κ²μ²λΌ 보μ΄κ² νλ€.
λ©ν°νλ‘μΈμ± : νλμ νλ‘κ·Έλ¨μ μ¬λ¬ νλ‘μΈμ€κ° λμμ μμ νλλ‘ κ΅¬μ±νλ κ²
λ©ν°νλ‘μΈμ±μ νΉμ§
λ©ν°νλ‘μΈμ±μ νλμ νλ‘μΈμ€κ° μ£½λλΌλ λ€λ₯Έ νλ‘μΈμ€μ μν₯μ μ£Όμ§ μμ μμ μ±μ΄ λλ€λ μ₯μ μ΄ μμ§λ§, λ§μ λ©λͺ¨λ¦¬κ³΅κ°κ³Ό CPUλ₯Ό μ°¨μ§νλ€λ λ¨μ μ΄ μλ€.
λ©ν°νλ‘μΈμ±μ λ¨μ
- λ€μμ νλ‘μΈμ€λ₯Ό μμ±νλ κ²μ λν ꡬνμ΄ μλΉν μ΄λ ΅λ€.
- Context switchingμ μ€λ²ν€λκ° λλ€
β λ©ν°μ€λ λ©μ΄ λμ¨ μ΄μ
λ©ν°νλ‘μΈμ± λμ λ©ν°μ€λ λ©μ μ¬μ©νλ μ΄μ
1. μμμ ν¨μ¨μ± μ¦λ
- λ©ν°νλ‘μΈμ€λ‘ μ€νλλ μμ
μ λ©ν°μ€λ λλ‘ μ€νν κ²½μ°, νλ‘μΈμ€λ₯Ό μμ±νμ¬ μμμ ν λΉνλ μμ€ν
μ½μ΄ μ€μ΄λ€μ΄ μμμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ€.
- νλ‘μΈμ€ κ° context switching μ λ¨μν CPU λ μ§μ€ν° κ΅μ²΄ λΏλ§ μλλΌ RAMκ³Ό CPU μ¬μ΄μ μΊμ¬ λ©λͺ¨λ¦¬μ λγ΄ λ°μ΄ν°κΉμ§ μ΄κΈ°νλλ―λ‘ μ€λ²ν€λκ° ν¬λ€.
- μ€λ λλ νλ‘μΈμ€ λ΄μ λ©λͺ¨λ¦¬λ₯΄ 곡μ νκΈ° λλ¬Έμ λ 립μ μΈ νλ‘μΈμ€μ λ¬λ¦¬ μ€λ λ κ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²μ΄ κ°λ¨ν΄μ§κ³ μμ€ν μμ μλͺ¨κ° μ€μ΄λ€κ² λλ€.
2. μ²λ¦¬ λΉμ© κ°μ λ° μλ΅ μκ° λ¨μΆ
- νλ‘μΈμ€ κ° ν΅μ(IPC)λ³΄λ€ μ€λ λ κ° ν΅μ μ λΉμ©μ΄ μ μΌλ―λ‘ μμ λ€ κ°μ ν΅μ λΆλ΄μ΄ μ€μ΄λ λ€.
- μ€λ λλ Stack μμμ μ μΈν λͺ¨λ λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ€.
- νλ‘μΈμ€ κ°μ μ ν μλλ³΄λ€ μ€λ λ κ°μ μ ν μλκ° λΉ λ₯΄λ€.
- context switching μ μ€λ λλ stack μμλ§ μ²λ¦¬νκΈ° λλ¬Έμ΄λ€.
λ©ν°μ€λ λ©μ μ₯λ¨μ
λ©ν°μ€λ λμ μ₯μ
- CPUμ μ¬μ©λ₯ μ ν₯μμν¨λ€.
- μμμ λ³΄λ€ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€.
- μ¬μ©μμ λν μλ΅μ±μ΄ ν₯μλλ€.
- μμ μ΄ λΆλ¦¬λμ΄ μ½λκ° κ°κ²°ν΄μ§λ€.
λ©ν°μ€λ λμ λ¨μ
- μ¬λ¬ μ€λ λκ° κ°μ νλ‘μΈμ€ λ΄μμ μμμ 곡μ νλ©΄μ μμ μ νκΈ° λλ¬Έμ λ°μν μ μλ λκΈ°ν, κ΅μ°©μν(deadlock)μ κ°μ λ¬Έμ λ€μ κ³ λ €ν΄μ μ μ€ν νλ‘κ·Έλλ°ν΄μΌ νλ€.
μ±κΈμ€λ λμ λ©ν°μ€λ λμ λΉκ΅
λ κ°μ μμ μ νλμ μ€λ λ(th1)λ‘ μ²λ¦¬νλ κ²½μ°μ λ κ°μ μ€λ λ(th1, th2)λ‘ μ²λ¦¬νλ κ²½μ°λ₯Ό κ°μ ν΄λ³΄μ.
νλμ μ€λ λ μ²λ¦¬νλ κ²½μ°
- ν μμ μ λ§μΉ νμ λ€λ₯Έ μμ μ μμ
λ κ°μ μ€λ λλ‘ μ²λ¦¬νλ κ²½μ°
- μ§§μ μκ°λμ λ κ°μ μ€λ λκ° λ²κ°μκ°λ©΄μ μμ μ μνν΄μ λμμ λ μμ μ΄ μ²λ¦¬λλ κ²κ³Ό κ°μ΄ λλΌκ² νλ€.


λ κ°μ μ€λ λλ‘ μμ ν μκ°μ΄ μ±κΈμ€λ λλ‘ μμ ν μκ°λ³΄λ€ μ‘°κΈ λ κ±Έλ¦¬κ² λλλ° κ·Έ μ΄μ λ μ€λ λ κ° μμ μ ν(context switching)μ μκ°μ΄ 걸리기 λλ¬Έμ΄λ€.
μμ μ ν (context switching)
μ»΄ν¨ν°μμ λμμ μ²λ¦¬ν μ μλ μ΅λ μμ μλ CPUμ μ½μ΄ μμ κ°λ€. λ§μ½ CPUμ μ½μ΄ μλ³΄λ€ λ λ§μ μ€λ λκ° μ€νλλ©΄, κ° μ½μ΄κ° μ ν΄μ§ μκ° λμ μ¬λ¬ μμ μ λ²κ°μκ°λ©° μννκ² λλ€.
μ΄ λ, κ° μ€λ λκ° μλ‘ κ΅μ²΄λ λ μ€λ λ κ°μ μμ μ ν(λλ λ¬Έλ§₯ κ΅ν)μ΄λΌλ κ²μ΄ λ°μνλ€. νμ¬κΉμ§μ μμ μν(ex. λ€μμ μ€νν΄μΌν μμΉ)λ λ€μ μμ μ νμν κ°μ’ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ½μ΄μ€λ μμ μ λ§νλ€.
μ΄λ¬ν μμ μ νμ 걸리λ μκ°μ΄ 컀μ§λ©΄ 컀μ§μλ‘ λ©ν°μ€λ λ©μ ν¨μ¨μ μ νλλ€. κ·Έλμ μ±κΈ μ½μ΄μμ λ¨μν CPUλ§μ μ¬μ©νλ κ³μ°μμ μ΄λΌλ©΄ μ€νλ € λ©ν°μ€λ λλ³΄λ€ μ±κΈμ€λ λλ‘ νλ‘κ·Έλλ°νλ κ²μ΄ λ ν¨μ¨μ μ΄λ€.
μ€λ λ κ·Έλ£Ή
μ€λ λ κ·Έλ£Ήμ μλ‘ κ΄λ ¨λ μ€λ λλ₯Ό κ·Έλ£ΉμΌλ‘ λ€λ£¨κΈ° μν κ²μΌλ‘, ν΄λλ₯Ό μμ±ν΄μ κ΄λ ¨λ νμΌλ€μ ν¨κ» λ£μ΄μ κ΄λ¦¬νλ κ²μ²λΌ μ€λ λ κ·Έλ£Ήμ μμ±ν΄μ μ€λ λλ₯Ό κ·Έλ£ΉμΌλ‘ λ¬Άμ΄μ κ΄λ¦¬ν μ μλ€.
λν, ν΄λ μμ ν΄λλ₯Ό μμ±ν μ μλ―μ΄ μ€λ λ κ·Έλ£Ήμ λ€λ₯Έ μ€λ λ κ·Έλ£Ήμ ν¬ν¨μν¬ μ μλ€. μ¬μ€ μ€λ λ κ·Έλ£Ήμ 보μμμ μ΄μ λ‘ λμ λ κ°λ μΌλ‘, μμ μ΄ μν μ€λ λ κ·Έλ£Ήμ΄λ νμ μ€λ λ κ·Έλ£Ήμ λ³κ²½ν μ μμ§λ§ λ€λ₯Έ μ€λ λ κ·Έλ£Ήμ μ€λ λλ₯Ό λ³κ²½ν μλ μλ€.
λ°λͺ¬ μ€λ λ (Daemon thread)
λ°λͺ¬ μ€λ λλ λ€λ₯Έ μΌλ° μ€λ λ(λ°λͺ¬ μ€λ λκ° μλ μ€λ λ)μ μμ μ λλ 보쑰μ μΈ μν μ μννλ μ€λ λμ΄λ€. μΌλ° μ€λ λκ° λͺ¨λ μ’ λ£λλ©΄ λ°λͺ¬ μ€λ λλ κ°μ μ μΌλ‘ μλ μ’ λ£λλλ°, κ·Έ μ΄μ λ λ°λͺ¬ μ€λ λλ μΌλ° μ€λ λμ 보쑰μν μ μννλ―λ‘ μΌλ° μ€λ λκ° λͺ¨λ μ’ λ£λκ³ λλ©΄ λ°λͺ¬ μ€λ λμ μ‘΄μ¬μ μλ―Έκ° μκΈ° λλ¬Έμ΄λ€.
μ΄ μ μ μ μΈνκ³ λ λ°λͺ¬ μ€λ λμ μΌλ° μ€λ λλ λ€λ₯΄μ§ μλ€. λ°λͺ¬ μ€λ λμ μλ‘λ κ°λΉμ§ 컬λ ν°, μλνλ‘μΈμμ μλμ μ₯, νλ©΄μλκ°±μ λ±μ΄ μλ€.
λ°λͺ¬ μ€λ λλ 무ν루νμ 쑰건문μ μ΄μ©ν΄μ μ€ν ν λκΈ°νκ³ μλ€κ° νΉμ μ‘°κ±΄μ΄ λ§μ‘±λλ©΄ μμ μ μννκ³ λ€μ λκΈ°νλλ‘ μμ±νλ€.
μ°Έκ³ μλ£
- γJavaμ μ μ 2γ, λ¨κΆμ±, λμ°μΆν
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://tcpschool.com/java/java_thread_multi
- https://blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rja1104&logNo=220551216367
'Programming > C# & .NET' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [C# νλ‘κ·Έλλ°] 4. λΉλκΈ°(2) (0) | 2021.07.19 |
|---|---|
| [C# νλ‘κ·Έλλ°] 3. λΉλκΈ°, λκΈ° (0) | 2021.07.08 |
| [C# νλ‘κ·Έλλ°] 2. μ€λ λ λκΈ°ν (0) | 2021.07.08 |
| [C# νλ‘κ·Έλλ°] 1. λ©ν°μ€λ λ (0) | 2021.07.08 |