π Programμ΄λ?
νλ‘κ·Έλ¨μ μ»΄ν¨ν°μμ μ€νν μ μλ νμΌλ‘, μ½κ² λ§ν΄μ μ½λ λ©μ΄λ¦¬λ€. μ΄λ λμ€ν¬μ μ μ₯λ μ μ μΈ μ‘΄μ¬λ‘, μ€νλκΈ° μ κΉμ§λ CPUμ λ©λͺ¨λ¦¬ λ± μμ€ν μμμ μ¬μ©νμ§ μλλ€. (μμ: λμ€ν¬μ μ μ₯λ μ€ν νμΌ chrome.exe)
π Processλ?
νλ‘μΈμ€λ νλ‘κ·Έλ¨μ΄ μ€νλμ΄ λμ μΈ μνλ‘ λ³νλ κ²μΌλ‘, μ€ν μ€μΈ νλ‘κ·Έλ¨μ΄λ€. μ΄μ체μ (OS)κ° νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬μ λ‘λνκ³ , CPU μμμ ν λΉνμ¬ μ€ννλ μκ° νλ‘μΈμ€κ° λλ€. μ¦, νλ‘μΈμ€λ CPUμ λ©λͺ¨λ¦¬ λ± μμ€ν μμμ μ¬μ©νλ©°, μ¬λ¬ κ°μ νλ‘μΈμ€κ° λμμ μ€νλ μλ μλ€. (μμ: chrome.exeκ° μ€νλμ΄ νλμ μ°½μ΄ λμμ§ μν)
β Process νΉμ§
- λ 립μ μΈ μ€ν λ¨μλ‘, κ° νλ‘μΈμ€λ μ΄μ체μ (OS) μ€μΌμ€λ¬μ μν΄ μ€νλ¨
- μ¬λ¬ μν(New, Ready, Running, Waiting/Blocked, Terminated)λ₯Ό κ°μ§
- κ° νλ‘μΈμ€λ μ€νλ λ κ³ μ ν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉ λ°μΌλ©°, λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Ό λΆκ°
- νλ‘μΈμ€ κ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μΌλ €λ©΄, νλ‘μΈμ€ κ° ν΅μ (Inter-Process Communication)μ΄ νμ
- νλ‘μΈμ€λ μ΅μν νλμ μ€λ λλ₯Ό κ°μ§λ©°, νμνλ©΄ μ¬λ¬ κ°μ μ€λ λ μμ± κ°λ₯
- Context Switchingμ΄ λ°μν μ μμΌλ©°, μ΄ κ³Όμ μμ Overhead λ°μ κ°λ₯
β νλ‘μΈμ€ λ©λͺ¨λ¦¬ ꡬ쑰
- μ½λ(Code) μμ : μ€νν νλ‘κ·Έλ¨μ λͺ λ Ήμ΄κ° μ μ₯λ¨
- λ°μ΄ν°(Data) μμ : μ μ λ³μ, μ μ λ³μκ° μ μ₯λ¨
- μ€ν(Stack) μμ : ν¨μ νΈμΆ μ μμ±λλ μ§μ λ³μ, λ¦¬ν΄ μ£Όμ μ μ₯
- ν(Heap) μμ : λμ λ©λͺ¨λ¦¬ ν λΉ κ³΅κ° (malloc, new λ±)
π Multi-Processλ?
λ©ν° νλ‘μΈμ€λ νλμ νλ‘κ·Έλ¨μ΄ μ¬λ¬ κ°μ νλ‘μΈμ€λ₯Ό μμ±νμ¬ λ³λ ¬λ‘ μ€ννλ λ°©μμ΄λ€. μ΄μ체μ (OS)λ λ©ν° νλ‘μΈμ€λ₯Ό ν΅ν΄ κ° νλ‘μΈμ€λ₯Ό λ 립μ μΌλ‘ μ€ννλ©°, κ° νλ‘μΈμ€λ μμ λ§μ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§λ―λ‘, λ€λ₯Έ νλ‘μΈμ€μ μν₯μ λ°μ§ μκ³ λμν μ μλ€. μ¦, λ©ν° νλ‘μΈμ€λ₯Ό μ¬μ©νλ©΄ ν νλ‘μΈμ€κ° λ©μΆκ±°λ μ’ λ£λλλΌλ, λ€λ₯Έ νλ‘μΈμ€λ κ³μ μ€νλ μ μμ΄ μμ μ±μ΄ μ¦κ°νλ€. (μμ: Chrome λΈλΌμ°μ λ κ° νμ λ³λμ νλ‘μΈμ€λ‘ μ€ννμ¬, νλμ νμ΄ λ©μΆ°λ λ€λ₯Έ νμ μ μμ μΌλ‘ λμ)
β Multi-Process μ₯μ
- ν νλ‘μΈμ€κ° λ©μΆ°λ λ€λ₯Έ νλ‘μΈμ€μ μν₯μ μ£Όμ§ μμ
- λ©ν°μ½μ΄ CPUλ₯Ό νμ©νμ¬ μ±λ₯μ ν₯μν μ μμ
- νλ‘μΈμ€ κ° λ©λͺ¨λ¦¬λ₯Ό 곡μ νμ§ μμΌλ―λ‘, 보μμ±μ΄ μ¦κ°
β Multi-Process λ¨μ
- κ° νλ‘μΈμ€κ° λ 립μ μΈ λ©λͺ¨λ¦¬λ₯Ό κ°μ§λ―λ‘ λ©λͺ¨λ¦¬ μλΉκ° νΌ
- μλ‘ λ€λ₯Έ νλ‘μΈμ€κ° λ°μ΄ν°λ₯Ό 곡μ νλ €λ©΄ μΆκ°μ μΈ ν΅μ κΈ°λ²μ΄ νμ
- νλ‘μΈμ€λ₯Ό μλ‘ μμ±ν λ CPUμ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ¬μ©
π Threadλ?
μ€λ λλ κ°μ νλ‘μΈμ€ λ΄μμ μ€νλλ μμ μμ λ¨μλ‘, νλ‘μΈμ€μ Code, Data, Heap λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ©΄μ μ¬λ¬ μμ μ λμμ μνν μ μλλ‘ λμμ€λ€. νλμ νλ‘μΈμ€λ μ΅μν νλμ μ€λ λλ₯Ό κ°μ§λ©°, νμνλ©΄ μ¬λ¬ κ°μ μ€λ λλ₯Ό μμ±ν μ μλ€.
β Thread νΉμ§
- νλ‘μΈμ€ λ΄μμ μ€νλλ κ°μ₯ μμ μμ λ¨μλ‘, κ° μ€λ λλ μ΄μ체μ (OS) μ€μΌμ€λ¬μ μν΄ μ€νλ¨
- μ¬λ¬ μν(New, Ready, Running, Waiting/Blocked, Terminated)λ₯Ό κ°μ§
- μ€λ λλ κ°μ νλ‘μΈμ€ λ΄μμ Code, Data, Heap λ©λͺ¨λ¦¬λ₯Ό 곡μ νμ§λ§, Stack μμμ κ° μ€λ λλ§λ€ λ 립μ μΌλ‘ ν λΉλ¨
- κ°μ νλ‘μΈμ€ λ΄μ μλ μ€λ λλ Code, Data, Heap λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ―λ‘, μΆκ°μ μΈ ν΅μ κΈ°λ²μ΄ νμ νμ§ μμ
- κ°μ νλ‘μΈμ€ λ΄μ μλ μ€λ λλ Code, Data, Heap λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ―λ‘, Context Switching λΉμ©μ΄ μ κ² λ¦
- λ¨, μ¬λ¬ μ€λ λκ° κ°μ μμμ μ κ·Όνλ©΄ λκΈ°ν λ¬Έμ κ° λ°μν μ μμΌλ―λ‘, Mutex, Semaphore, Lock λ±μ λκΈ°ν κΈ°λ² νμ
π Multi-Threadλ?
κ³Όκ±°μλ νλμ νλ‘κ·Έλ¨μ μ€ννλ©΄ λ¨μΌ νλ‘μΈμ€λ‘ λμνκΈ° λλ¬Έμ, Chrome κ°μ λΈλΌμ°μ λ₯Ό μ€ννλ©΄ νλμ μ°½λ§ λμΈ μ μμκ³ , λ¨μΌ μ€λ λ λ°©μμ΄μκΈ° λλ¬Έμ νμΌμ λ€μ΄λ‘λνλ λμ λ€λ₯Έ μμ μ ν μ μμλ€. κ·Έλ¬λ νμ¬λ λ©ν° νλ‘μΈμ€λ₯Ό μ§μνμ¬, μ¬λ¬ κ°μ μμ μ λμμ μννκ³ μ ν λ μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±νλ λ°©λ²μ κ³ λ €ν μλ μλ€. νμ§λ§ νλ‘μΈμ€λ λ 립μ μΈ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ λλΉκ° μ¬νκ³ , CPU μμμ΄ λΉν¨μ¨μ μΌλ‘ ν λΉλλ λ¬Έμ κ° λ°μνλ€. μ΄λ¬ν νκ³λ₯Ό ν΄κ²°νκΈ° μν΄ λ±μ₯ν κ°λ μ΄ λ©ν° μ€λ λλ‘, νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ κ°μ μ€λ λλ₯Ό μ€ννμ¬ λ©ν°νμ€νΉκ³Ό μ±λ₯ ν₯μμ κ°λ₯νκ² λ§λ€μλ€.
λ©ν° μ€λ λλ νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ κ°μ μ€λ λλ₯Ό μμ±νμ¬ λ³λ ¬λ‘ μμ μ μννλ λ°©μμ΄λ€. μ¦, κ°μ νλ‘μΈμ€ λ΄μμ μ¬λ¬ κ°μ μ€λ λκ° λμμ μ€νλλ©΄μ, νλμ μμ μ΄ λλ λκΉμ§ κΈ°λ€λ¦΄ νμ μμ΄ μ¬λ¬ μμ μ λμμ μνν μ μλλ‘ νλ€. λ©ν° μ€λ λλ₯Ό μ¬μ©νλ©΄ νλμ νλ‘μΈμ€μμ μ¬λ¬ κ°μ μμ μ λμμ μ²λ¦¬ν μ μμΌλ©°, νλ‘μΈμ€ μμ±λ³΄λ€ μ μ 리μμ€λ‘ μ±λ₯μ ν₯μμν¬ μ μλ€. (μμ: Chrome λΈλΌμ°μ μμλ νλμ νμ΄ νλμ νλ‘μΈμ€λ‘ μ€νλμ§λ§, κ° ν λ΄μμλ μΉ νμ΄μ§λ₯Ό λ λλ§νλ μ€λ λ, μ¬μ©μ μ λ ₯μ μ²λ¦¬νλ μ€λ λ, νμΌ λ€μ΄λ‘λλ₯Ό μ²λ¦¬νλ μ€λ λ λ± μ¬λ¬ κ°μ μ€λ λκ° λμνμ¬ λ€μν μμ μ λμμ μν)
β Multi-Thread μ₯μ
- νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ κ°μ μμ μ λμμ μνν μ μμ΄ μ±λ₯ ν₯μ
- νλ‘μΈμ€λ₯Ό μλ‘ μμ±νλ κ²λ³΄λ€ μ μ 리μμ€λ‘ λ©ν°νμ€νΉ κ°λ₯
- μ€λ λ κ° λ°μ΄ν°λ₯Ό 곡μ νλ κ²μ΄ νλ‘μΈμ€ κ° ν΅μ (IPC)λ³΄λ€ ν¨μ¨μ
- CPU μ¬μ©λ₯ μ κ·Ήλννμ¬ λ©ν°μ½μ΄ νκ²½μμ μ±λ₯μ μ΅μ νν μ μμ
β Multi-Thread λ¨μ
- νλμ μ€λ λκ° λ¬Έμ κ° λ°μνλ©΄ κ°μ νλ‘μΈμ€ λ΄ λ€λ₯Έ μ€λ λλ μν₯μ λ°μ μ μμ
- μ€λ λ κ° κ³΅μ μμ μ κ·Ό μ λκΈ°ν λ¬Έμ (Race Condition, Deadlock)κ° λ°μν μ μμ
- μ€λ λ μ€μΌμ€λ§ λ° Context Switchingμ΄ λ§μμ§λ©΄ Overheadκ° μ¦κ°ν μ μμ
- λ©ν° μ€λ λ©μ μλͺ» ꡬννλ©΄, λκΈ°ν λΉμ©μ΄ μ¦κ°νμ¬ μ±λ₯μ΄ μ νλ μ μμ
+ μΆμ²
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread
'π Computer Science' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Ping, Jitter, Packet Lossμ λνμ¬ (0) | 2025.02.19 |
---|---|
TCPμ UDPμ λνμ¬ (0) | 2025.02.19 |
λ©λͺ¨λ¦¬ κ³μΈ΅ ꡬ쑰μ λνμ¬ (0) | 2025.02.17 |
VM, Container, Hypervisor, Docker, Kubernetesμ λνμ¬ (0) | 2025.02.14 |
Cookie, Sessionμ λνμ¬ (0) | 2025.02.13 |