Process VS Thread - ehrldyd15/Swift_Skills GitHub Wiki
Process VS Thread
νλ‘μΈμ€(Process) vs μ°λ λ(Thread)
1. νλ‘μΈμ€(Process)μ λ©ν° νλ‘μΈμ€(Multi Process)
1) νλ‘μΈμ€(Process)
μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λ μμ μ λ¨μλ‘ μ μλλ€.

κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμ (Code, Data, Stack, Heap)μ κ°μ ν λΉ λ°λλ€.
λ°λΌμ νλ‘μΈμ€λΌλ¦¬λ μλ‘μ λ³μλ μλ£κ΅¬μ‘°μ λν΄ μ λ μ κ·Όν μ μλ€.
λ§μ½, A νλ‘μΈμ€κ° B νλ‘μΈμ€ μμ μ κ·Όνλ €κ³ νλ©΄,
νλ‘μΈμ€κ° ν΅μ (IPC)λ₯Ό μ¬μ©ν΄μΌ ν¨(νμΌ, μμΌ λ±)
2) λ©ν° νλ‘μΈμ€(Multi Process)

νλμ νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ νλ‘μΈμ€λ‘ ꡬμ±νμ¬, κ° νλ‘μΈμ€λ§λ€ νλμ μμ (Task)μ© μ²λ¦¬νλλ‘ νλ κ²μΌλ‘ μ μλλ€.
μλ₯Ό λ€μ΄,
μλ μ΄νμ μ¬μ©νλ€κ³ νμ λ
μλ μκ° μ‘°μ λμμ ꡬννλ νλ‘μΈμ€
μλ μκ°μ΄ μΈλ¦¬κΈ°κΉμ§ κ³μ°νλ νλ‘μΈμ€
μλμ΄ μΈλ¦¬λ νλ‘μΈμ€
μ΄λ κ² νλμ νλ‘κ·Έλ¨μμ μΌμ΄λλ μ¬λ¬κ°μ μμ μ νλ‘μΈμ€λ₯Ό μ¬λ¬ κ° μμ±νμ¬ κ°μ νλμ© μ²λ¦¬νλλ‘ ν΄μ£Όλ κ²μ΄λ€.
μ₯μ
λ 립λ λ©λͺ¨λ¦¬ μμμ κ°μ ν λΉ λ°κΈ° λλ¬Έμ νλ‘μΈμ€ κ° μλ‘μ μμμ΄ μΉ¨ν¬ν μ μλ€.
λ°λΌμ λ
립λ ꡬ쑰μ΄κΈ° λλ¬Έμ μμ μ±μ΄ λλ€.
λ¨μ
μλμ 1μ΄ νλ‘ λ§μΆλ©΄ λ±λ‘νμλ§μ λμμ μλμ΄ μΈλ €μ κ°κ°μ νλ‘μΈμ€λ€μ΄ λμμ μ§νλλ κ²μ²λΌ 보μ΄μ§λ§
μ€μ λ‘ CPUλ μ νλ‘μΈμ€λ€μ λΉ λ₯΄κ² μλ€ κ°λ€ νλ©° μ€ννκ³ μλ κ²μ΄λ€.
λ°λΌμ, κ·Έ κ³Όμ μμ
Aνλ‘μΈμ€λ₯Ό μ€νν λ Aνλ‘μΈμ€μ λ©λͺ¨λ¦¬ μμμ μ¬λ¦¬κ³ ,
Bνλ‘μΈμ€λ₯Ό μ€νν λ Bνλ‘μΈμ€μ λ©λͺ¨λ¦¬ μμμ μ¬λ¦¬κ³
μ΄λ° μμ
λ€μ Context Switchingμ΄λΌκ³ νλλ°,
νλ‘μΈμ€λ λ©λͺ¨λ¦¬κ° λͺ¨λ λ 립μ μΌλ‘ μ‘΄μ¬νκΈ° λλ¬Έμ, Context Switching μ CPUμ λΆλ΄λ 컀μ§κ³ μ€λ²ν€λκ° λ°μνκ² λλ€λ κ²μ΄λ€.
λν, νλ‘μΈμ€ κ° μμ 곡μ κ° μ΄λ ΅λ€λ μ λ λ νλμ λ¨μ μ΄λ€.
2. μ°λ λ(Thread)μ λ©ν° μ°λ λ(Multi Thread)
1) μ°λ λ(Thread)
ν νλ‘μΈμ€ λ΄μμ λμλλ μ¬λ¬ μ€νμ νλ¦μΌλ‘ μ μλλ€.
μ°λ λλ νλ‘μΈμ€κ° μλ, νλ‘μΈμ€ λ΄μμ λμλλ κ²μ΄κΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μμμ λ 립μ μΌλ‘ ν λΉλ°μ§ λͺ»νλ€.

μμ κ°μ΄ Code, Data, Heap μμμ 곡μ νκ³ Stack μμλ§ λ 립μ μΌλ‘ ν λΉλ°μ μ μλ€.
Stack μμλ§ λ³λλ‘ κ°μ§λ μ΄μ λ
Stack μμμ΄ LIFOλΌμ Stackμ΄ μμ΄λ©΄ νλ‘μΈμ€κ° μμΈ μ±λ‘ μμλλ‘ λμ νλ¦μ λ°©ν΄κ° λκΈ° λλ¬Έμ΄λ€.
λ°λΌμ, μ°λ λ λΌλ¦¬λ ν μμμ 곡μ νμ¬ κ°μ μμμ μ κ·Όν μ μμ§λ§
κ°μμ μ€ν μμμ μλ‘ μ κ·Όμ΄ λΆκ°λ₯νλ€.
2) λ©ν° μ°λ λ(Multi Thread)

νλμ νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ μ°λ λλ‘ κ΅¬μ±νμ¬, κ° μ°λ λλ§λ€ νλμ μμ (Task)μ© μ²λ¦¬νλλ‘ νλ κ²μΌλ‘ μ μλλ€.
μλμ°, 리λ μ€ λ± λ§μ μ΄μ체μ κ° λ©ν° νλ‘μΈμ±μ μ§μνμ§λ§, μ΄ λ©ν° μ°λ λλ₯Ό κΈ°λ³ΈμΌλ‘ νκ³ μλ€.
μ₯μ
-
μ°λ λ κ° Code, Data, Heap μμμ 곡μ νκΈ° λλ¬Έμ, Context Switchingμ΄ λΉ λ₯΄λ€.
-
νλ‘μΈμ€λ₯Ό μμ±νμ¬ μμμ ν λΉνλ κ²μ΄ μλκΈ° λλ¬Έμ, μμ±/μ’ λ£ μκ°λ νλ‘μΈμ€λ³΄λ€ λΉ λ₯΄λ€.
-
νλ‘μΈμ€ κ° ν΅μ μ΄ κΉλ€λ‘μ΄ λ°λ©΄μ, μ°λ λλ€μ stack μμμ μ μΈνκ³ λλ¨Έμ§ μμμ 곡μ νκΈ° λλ¬Έμ ν΅μ λ°©λ²μ΄ ν¨μ¬ κ°λ¨νλ€.
λ¨μ
-
Stackμμ λΉΌκ³ κ³΅μ λ₯Ό νκΈ° λλ¬Έμ, Aμ°λ λκ° μ κ·Όνλ €λ ν μμμ μμμ Bκ° κ°μκΈ° μ κ·Όν΄μ λ°κΏλ²λ¦¬λ λ±μ κΉλ€λ‘μμ΄ μ‘΄μ¬νλ€.
-
μμ 곡μ μ λ¬Έμ κ° μκΈ΄λ€.(λκΈ°ν λ¬Έμ )
-
λ 립μ μ΄μ§ μμ, νλμ μ°λ λμμ λ¬Έμ κ° λ°μ μ μ 체 μ°λ λκ° μν₯μ λ°λλ€.
μ 리
