νλ‘μΈμ€(Process), μ€λ λ(Thread) λ?
λ¨Όμ κ°λ¨ μ€λͺ !
νλ‘κ·Έλ¨μ΄λ, νμΌμ΄ μ μ₯ μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μ μ μΈ μν μ¦ μ½λ λ©μ΄λ¦¬ νμΌμ λ§νλ€.
μ΄ νλ‘κ·Έλ¨ μ€ν μ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°λ©΄μ λμ μΈ μν μ¦, μ€νλκ³ μλ νλ‘κ·Έλ¨μ νλ‘μΈμ€λΌκ³ νλ€.
μ΄ νλ‘μΈμ€ λ΄μμ μ€μ λ‘ μμ μ μννλ 주체λ₯Ό μ€λ λλΌκ³ νλ€.
μ¬μ μ μ μλ‘λ,
- νλ‘κ·Έλ¨(Program) : μ»΄ν¨ν° νλ‘κ·Έλ¨(computer program)μ μ»΄ν¨ν°μμ μ€νλ λ νΉμ μμ (specific task)μ μννλ μΌλ ¨μ λͺ λ Ήμ΄λ€μ λͺ¨μ(μ§ν©)
- νλ‘μΈμ€(Process) : μ΄μ체μ λ‘λΆν° μμμ ν λΉλ°μ μμ μ λ¨μ.
- μ€λ λ(Thread) : νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€ν νλ¦μ λ¨μ.
νλ‘μΈμ€μ μ€λ λμ λν΄ μμΈν λ€μ¬λ€λ³΄μ~
π₯ νλ‘μΈμ€(Process)
- μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λ μμ μ λ¨μ
- μ΄λ, μ΄μ체μ λ νλ‘μΈμ€λ§λ€ κ°κ° Code, Data, Stack, Heapμ κ΅¬μ‘°λ‘ λμ΄ μλ λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉν΄ μ€λ€.
- μ¦, κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μμ μ€νλλ€. λ°λΌμ ν νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£μ μ κ·Όν μ μλ€.
*ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμμ μ κ·Όνλ €λ©΄ νλ‘μΈμ€ κ°μ ν΅μ (IPC, inter-process communication)μ μ¬μ©ν΄μΌ νλ€.
ex) νμ΄ν, νμΌ, μμΌ λ±μ μ΄μ©ν ν΅μ λ°©λ²
π₯ μ€λ λ(Thread)
- νλ‘μΈμ€ λ΄μμ μ€νλλ μ¬λ¬ νλ¦μ λ¨μμ΄λ€.
- μ¦, νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€νμ λ¨μ
- μ€λ λλ νλ‘μΈμ€μ λ¬λ¦¬ Stack μΈ λλ¨Έμ§ Code, Data, Heap νμμ λ©λͺ¨λ¦¬ μμμ 곡μ νλ€.
(*Stackμ LIFO ꡬ쑰μ΄κΈ° λλ¬Έ)
- μ¦, κ°μ νλ‘μΈμ€ λ΄μ μ£Όμ 곡κ°μ΄λ μμλ€μ 곡μ νλ©΄μ μ€ν.
- ν μ€λ λκ° νλ‘μΈμ€ μμμ λ³κ²½νλ©΄ λ€λ₯Έ μ΄μ μ€λ λ(Sibling thread)λ λ³κ²½λ μ¬νμ νμΈν μ μλ€.
λ°λΌμ νλ‘μΈμ€μ μ€λ λμ λ©λͺ¨λ¦¬ μμ μ°¨μ΄μ μ ν΅ν΄,
- νλ‘μΈμ€λ μ€ν μ€ μ€λ₯ λ°μμΌλ‘ κ°μ μ’ λ£κ° λλ€λ©΄ λ€λ₯Έ νλ‘μΈμ€μ μν₯μ μ£Όμ§ μμ§λ§,
- μ€λ λλ 곡μ λλ λ©λͺ¨λ¦¬ μμ(Code, Data, Heap)μΌλ‘ μΈν΄ μ€λ λ νλμ μ€λ₯ λ°μ μ κ°μ νλ‘μΈμ€ λ΄μ λ€λ₯Έ μ€λ λμκ² μν₯μ μ€λ€λ κ²μ μ μ μλ€.
μμμ λ°°μ΄ νλ‘μΈμ€μ μ€λ λλ‘ νλ‘κ·Έλ¨μ μ±λ₯μ λμ΄λ μ²λ¦¬ λ°©λ²μλ λ©ν° νλ‘μΈμ€μ λ©ν° μ€λ λκ° μλ€.
π₯ λ©ν° νλ‘μΈμ€(Multi Process)
νλμ μμ©νλ‘κ·Έλ¨μ μ¬λ¬ νλ‘μΈμ€λ‘ ꡬμ±νμ¬ κ° νλ‘μΈμ€κ° νλμ μμ μ μ²λ¦¬νλλ‘ μ€ν
- νλ‘μΈμ€λ κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉλ°μκΈ° λλ¬Έμ νλμ νλ‘κ·Έλ¨μ μνλ νλ‘μΈμ€λ€ μ¬μ΄μ λ³μλ₯Ό 곡μ ν μ μλ€.
- Context Switching μ€λ²ν€λκ° λ°μν μ μλλ°, κ·Έ κ³Όμ μμ μΊμ λ©λͺ¨λ¦¬ λ± λ¬΄κ±°μ΄ μμ μ΄ μ§νκ³Ό Taskμνμ μμ΄μ μ€λ²ν€λκ° λ°μνκ² λλ€.
βοΈ Context Switching
: CPUμμ μ¬λ¬ νλ‘μΈμ€λ₯Ό λμκ°λ©΄μ μμ μ μ²λ¦¬νλ κ²
μ¦, λμ μ€μΈ νλ‘μΈμ€κ° λκΈ°λ₯Ό νλ©΄μ ν΄λΉ νλ‘μΈμ€μ μν(Context)λ₯Ό 보κ΄νκ³ , λκΈ°νκ³ μλ λ€μ μμμ νλ‘μΈμ€κ° λμνλ©΄μ μ΄μ μ 보κ΄νλ νλ‘μΈμ€μ μνλ₯Ό 볡ꡬνλ μμ
βοΈ Context Switchingμμμ μ€λ²ν€λ(Overhead)
Context Switching κ³Όμ μμ μΊμ λ©λͺ¨λ¦¬ μ΄κΈ°ν λ± λ¬΄κ±°μ΄ μμ
μ΄ μ§νλκ³ λ§μ μκ°μ΄ μλͺ¨λλ λ±μ μ€λ²ν€λκ° λ°μνκ² λλ€.
νλ‘μΈμ€λ κ°κ°μ λ
립λ λ©λͺ¨λ¦¬ μμμ ν λΉλ°μκΈ° λλ¬Έμ νλ‘μΈμ€ μ¬μ΄μμ 곡μ νλ λ©λͺ¨λ¦¬κ° μμ΄,
Context Switchingκ° λ°μνλ©΄ μΊμμ μλ λͺ¨λ λ°μ΄ν°λ₯Ό λͺ¨λ 리μ νκ³ λ€μ μΊμ¬ μ 보λ₯Ό λΆλ¬μ€λ κ³Όμ μμ μ€λ²ν€λ λ°μ
*μ€λ²ν€λ(Overhead) : μΆκ°μ μΌλ‘ μκ°, λ©λͺ¨λ¦¬, μμμ΄ μ¬μ©λλ νμ
π₯ λ©ν° μ€λ λ(Multi Thread)
νλμ νλ‘μΈμ€μ μ¬λ¬κ°μ μ€λ λλ‘ μμμ 곡μ νλ©° μμ
μ λλμ΄ μννλ κ²
WIndow, Linux λ± λ§μ μ΄μ체μ λ€μ΄ λ©ν° νλ‘μΈμ±μ μ§μνκ³ μμ§λ§ λ©ν°μ€λ λ©μ κΈ°λ³ΈμΌλ‘ νκ³ μμ΅λλ€.
λνμ μΈ λ©ν°μ€λ λ©μ μλ μΉμλ²λ₯Ό λ€ μ μμ΅λλ€.
βοΈ λ©ν° νλ‘μΈμ€(Multi Process)μ λ©ν° μ€λ λ(Multi Thread) λΉκ΅
μ’ λ₯ | μ₯μ | λ¨μ |
λ©ν° νλ‘μΈμ€ |
|
|
λ©ν° μ€λ λ |
|
|