-
[Thread] Program, Process, Thread, Multi-Threadλ? - ꡬ체μ μΈ μλ λ°©μμ λν κ³΅λΆ κΈ°λ‘κ°λ°/Java 2022. 4. 23. 17:35
π‘Program, Process, Threadλ?
νλ‘κ·Έλ¨(Program)μ΄λ,
νμΌμ΄ μ μ₯ μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ° μμ§ μμ μ μ μΈ μνλ₯Ό λ§νλ€.- λ©λͺ¨λ¦¬μ μ¬λΌκ° μμ§ μμ: μμ§ μ΄μ체μ κ° νλ‘κ·Έλ¨μκ² λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μ£Όμ§ μμλ€λ λ»μ΄λ€. λͺ¨λ νλ‘κ·Έλ¨μ μ΄μ체μ κ° μ€νλκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄ μ€μΌ μ€νλ μ μλ€.
- μ μ μΈ μν: μ μ (ιη)μ΄λΌλ λ¨μ΄ κ·Έλλ‘, μμ§μ΄μ§ μλ μνλΌλ λ»μ΄λ€. ν λ§λλ‘ μμ§ μ€νλμ§ μκ³ κ°λ§ν μλ€λ λ»μ΄λ€.
μ¦, νλ‘κ·Έλ¨(Program)μ΄λΌλ λ¨μ΄λ μμ§ μ€νλμ§ μμ νμΌ κ·Έ μ체, μ½λ λ©μ΄λ¦¬λ₯Ό κ°λ¦¬ν€λ λ§μ΄λ€. μλ₯Ό λ€λ©΄, μλμ°μ *.exe νμΌμ΄λ MacOSμ *.dmg νμΌ λ±λ± μ¬μ©μκ° λλ¬μ μ€ννκΈ° μ μ νμΌμ λ§νλ€.
νλ‘κ·Έλ¨μ μ€ννλ μκ° ν΄λΉ νμΌμ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λκ³ , μ΄ μνλ₯Ό λμ (εη)μΈ μνλΌκ³ νλ©°, μ΄ μνμ νλ‘κ·Έλ¨μ νλ‘μΈμ€(Process)λΌκ³ νλ€.
μν€νΌλμμμλ νλ‘μΈμ€μ λν΄ μ μλ₯Ό λ΄λ¦΄ λ, κ·Έλ₯ μ€νλκ³ μλ μ»΄ν¨ν° νλ‘κ·Έλ¨μ΄λΌκ³ μ μλ₯Ό λ΄λ¦¬κ³ μμΌλ©°, μ€μΌμ€λ§ λ¨κ³μμμ "μμ "κ³Ό κ°μ λ¨μ΄λΌκ³ λ΄λ 무방νλ€κ³ νκ³ μλ€. μ€μ λ‘ νλ‘μΈμ€λΌλ λ¨μ΄κ° μμ μ€μΈ νλ‘κ·Έλ¨μ μλ―Ένλ λ¨μ΄μ΄κΈ° λλ¬Έμ΄λ€.
κ·Έλ λ€λ©΄ Threadλ 무μμΌκΉ?
κ³Όκ±°μλ νλ‘κ·Έλ¨μ μ€νν λ, μ€ν μμλΆν° λκΉμ§ νλμ νλ‘μΈμ€λ§μ μ¬μ©ν΄μ μ§ννλ€. νμ§λ§, μκ°μ΄ νλ₯Όμλ‘ νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§λ€λ³΄λ νλμ νλ‘μΈμ€λ§ μ¬μ©ν΄μ νλ‘κ·Έλ¨μ μ€ννκΈ°μλ λ² μ°¨κ² λμλ€. μ€μ λ‘ μ΄μ λ νλ‘κ·Έλ¨ νλκ° λ¨μν νκ°μ§ μμ λ§μ νλ κ²½μ°λ μλ€.
μλ₯Ό λ€μ΄, μΈν°λ· λΈλΌμ°μ λΌλ νλμ νλ‘μΈμ€κ° μμ λ, μ§κΈμ²λΌ λμμμ μ¬μλ νκ³ , μ€ν¬λ‘€λ λ΄λ¦¬κ³ , κ²μλνκ³ μ΄λ° μμ μ νλ²μ νλλ§ μ²λ¦¬νμ§μκ³ λμμ μ²λ¦¬ν μ μλ λ°©λ²μ΄ νμν΄μ§ κ²μ΄λ€.
κ·ΈλΌ ν νλ‘κ·Έλ¨μ μ²λ¦¬νκΈ° μν νλ‘μΈμ€λ₯Ό μ¬λ¬κ° λ§λ€λ©΄ μ΄λ¨κΉ? μ΄κ²μ λΆκ°λ₯νλ€. μλνλ©΄ μ΄μ체μ λ μμ μ±μ μν΄μ νλ‘μΈμ€λ§λ€ μμ μκ² ν λΉλ λ©λͺ¨λ¦¬ λ΄μ μ 보μλ§ μ κ·Όν μ μλλ‘ μ μ½μ λκ³ μκ³ , μ΄λ₯Ό λ²μ΄λλ μ 보μ μ κ·Όνλ €λ©΄ μ€λ₯κ° λ°μνκΈ° λλ¬Έμ΄λ€.
μ΄λ κ² ν΄μ μ겨λ, λ μμ μ€ν λ¨μμ κ°λ μ΄ Threadλ€.
π‘μλ°μμ Processμ Threadλ μ΄λ»κ² μκ°νλ©΄ λ κΉ?
Java Process
μλ° νλ‘κ·Έλ¨μ μ¬μ©νμ¬ λ€μ ν΄λμ€ μ΄λ¦μ λΆμ΄κ³ , μν°λ₯Ό μΉλ©΄ μ μ΄λ νλμ JVMμ΄ μμλλ€. λ³΄ν΅ μ΄λ κ² JVMμ΄ μμλλ©΄ μλ° νλ‘μΈμ€(Process)κ° μμνλ€.
java λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ ν΄λμ€λ₯Ό μ€νμν€λ μκ° μλ° νλ‘μΈμ€κ° μ€νλλ€.
Thread
μ΄ νλ‘μΈμ€λΌλ μΈν리 μμμ μ¬λ¬ κ°μ μ°λ λλΌλ κ²μ΄ μλ₯λ°λ₯ μ΄κ² λλ€. μ¦, νλμ νλ‘μΈμ€ λ΄μ μ¬λ¬ μ°λ λκ° μνλλ€. νμ§λ§, κ±°κΎΈλ‘ μ¬λ¬ νλ‘μΈμ€κ° 곡μ νλ νλμ μ°λ λκ° μνλλ μΌμ μ λ μλ€. μ΄λ€ νλ‘μΈμ€λ κ°μ μ°λ λκ° νλ μ΄μ μνλλ€.
main() λ©μλκ° μνλλ©΄μ νλμ μ°λ λκ° μμλλ€. λ§μ½ λ§μ μ°λ λκ° νμνλ€λ©΄, μ΄ main() λ©μλμμ μ°λ λλ₯Ό μμ±ν΄ μ£Όλ©΄ λλ€. μλ°λ₯Ό μ¬μ©νμ¬ μΉμ μ 곡ν λμλ Tomcatκ³Ό κ°μ WAS(Web Application Server)λ₯Ό μ¬μ©νλ€. μ΄ WASλ λκ°μ΄ main() λ©μλμμ μμ±ν μ°λ λλ€μ΄ μνλλ κ²μ΄λ€.
cf) μλ¬΄λ° μ°λ λλ₯Ό μμ±νμ§ μμλ JVMμ κ΄λ¦¬νκΈ° μν μ¬λ¬ μ°λ λκ° μ‘΄μ¬νλ€. μλ₯Ό λ€λ©΄, μλ°μ μ°λ κΈ° κ°μ²΄λ₯Ό μ²μνλ GC κ΄λ ¨ μ°λ λκ° μ¬κΈ°μ μνλ€.
π‘Processμ Threadμ μλλ°©μμ μ΄λ»κ² λ κΉ?
νλ‘μΈμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ, μ΄μ체μ λ‘λΆν° μμ€ν μμμ ν λΉλ°λλ€κ³ νμλ€. μ΄ λ μ΄μ체μ λ κ° Processλ§λ€ λ 립λ λ©λͺ¨λ¦¬ μμμ μλ κ·Έλ¦Όκ³Ό κ°μ΄ ν λΉν΄μ€λ€. λ€μ λ§ν΄μ, Processλ μλ²½ν λ 립μ μ΄κΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μμ(Code, Data, Heap, Stack)μ λ€λ₯Έ νλ‘μΈμ€μ 곡μ νμ§ μλλ€.
Process λ©λͺ¨λ¦¬ μμ
Code : Program μ μ½λ
Data : μ μ λ³μ
Stack : 맀κ°λ³μ, μ§μλ³μ λ± μμμ μΈ μλ£
Heap : λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬μ΄μ λ¬λ¦¬, Process νΉμ±μ νκ³λ₯Ό ν΄κ²°νκΈ° μν΄ λ§λ€μ΄μ§ κ°λ μΈ Threadλ Threadκ°μ λ©λͺ¨λ¦¬λ₯Ό μλ‘ κ³΅μ νλ€. μ°λ λλ ν΄λΉ μ°λ λλ₯Ό μν Stackμ μμ±ν λΏ, μ΄ μΈμ Code, Data, Heapμμμ 곡μ νλ€. μ΄λ κ² μλ‘ νλ‘μΈμ€μ μμμ 곡μ νλ©΄μ, νλ‘μΈμ€ μ€ν νλ¦μ μΌλΆκ° λλ κ²μ΄λ€.
+) μ€νμ λ 립μ μΌλ‘ ν λΉνλ μ΄μ λ 무μμΌκΉ?
- μ€νμ ν¨μ νΈμΆ μ μ λ¬λλ 맀κ°λ³μ, λλμκ° μ£Όμκ° λ° ν¨μ λ΄μμ μ μΈνλ μ§μλ³μ λ±μ μ μ₯νκΈ° μν΄ μ¬μ©λλ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€. λ°λΌμ μ€ν λ©λͺ¨λ¦¬ 곡κ°μ΄ λ 립μ μ΄λΌλ κ²μ λ 립μ μΈ ν¨μ νΈμΆμ΄ κ°λ₯νλ€λ κ²μ΄κ³ , μ΄λ λ 립μ μΈ μ€ν νλ¦μ΄ μΆκ°λλ κ²μ΄λ€. κ²°κ³Όμ μΌλ‘ μ€ν νλ¦μ μΆκ°λ₯Ό μν μ΅μ μ‘°κ±΄μ΄ λ 립λ μ€νμ μ 곡νλ κ²μ΄λ€.
+) μ½λ μμμ 곡μ
- νλ‘μΈμ€λ λ 립μ μΈ κ΅¬μ‘°μ΄κΈ° λλ¬Έμ λ€λ₯Έ νλ‘μΈμ€μ Codeμμμ μλ ν¨μλ₯Ό νΈμΆν μ μλ€.
- μ°λ λλ Codeμμμ 곡μ νκΈ° λλ¬Έμ λ κ° μ΄μμ μ°λ λκ° μμ μ΄ ν¬ν¨λ νλ‘μΈμ€μ Codeμμμ μλ ν¨μλ₯Ό νΈμΆν μ μλ€.
+) λ°μ΄ν° μμκ³Ό ν μμμ 곡μ
- μ μ λ³μμ λμ ν λΉλ λ©λͺ¨λ¦¬ 곡κ°μ 곡μ ν μ μκ³ , μ΄λ₯Ό ν΅ν΄ μ°λ λ κ° ν΅μ μ ν μ μμ§λ§, λμμ λ©λͺ¨λ¦¬μ μ κ·ΌνκΈ° λλ¬Έμ μ£Όμν΄μΌ νλ€.
+) μ€λ₯ λ°μ μ
- νλ‘μΈμ€λ μ€ννλ€κ° μ€λ₯κ° λ°μν΄μ νλ‘μΈμ€κ° κ°μ λ‘ μ’ λ£λλ€λ©΄, 곡μ νκ³ μλ νμΌμ μμμν€λ κ²½μ°κ° μλ μ΄μ μλ¬΄λ° μν₯μ μ£Όμ§ μλλ€.
- μ°λ λλ Code/Data/Heap λ©λͺ¨λ¦¬ μμμ λ΄μ©μ 곡μ νκΈ° λλ¬Έμ, μ΄λ€ μ€λ λ νλμμ μ€λ₯κ° λ°μνλ€λ©΄, κ°μ νλ‘μΈμ€ λ΄μ λ€λ₯Έ μ€λ λκ° λͺ¨λ κ°μ λ‘ μ’ λ£λλ€.
π‘CPU μ½μ΄ κ°μμ Thread κ°μμ μκ΄ κ΄κ³λ?
κΈ°μ΄ κ°λ λΆν° νκ³ κ°μ. CPUμ μ±λ₯κ³Ό κ΄λ ¨ μλ κ²μ ν¬κ² μ½μ΄, μ°λ λ, κ·Έλ¦¬κ³ ν΄λμ΄λ€.
ν΄λμ΄λ CPUμ μλλ₯Ό λνλ΄λ λνμ μΈ λ¨μλ‘μ¨, 1μ΄λΉ λ΄λΆμμ μ΄λμ λμ μμ μ΄ μ²λ¦¬κ° κ°λ₯νμ§λ₯Ό λνλ΄λ μμΉμ΄λ€. μ΄μ μμΉλ μ£Όνμ λ¨μμΈ ν€λ₯΄μΈ (Hz)λ‘ νκΈ°νλ€. λ°λΌμ μ΄ ν€λ₯΄μΈ κ° λμΌλ©΄ λμμλ‘ λ³΄λ€ λ λΉ λ₯Έ μ±λ₯μ 보μ¬μ£Όμλ€. 1GHzνλ©΄ μ΄λΉ 10μ΅νλ₯Ό μλ―Ένλ€. μλ κ³Όκ°μ΄ μ½μ΄μ μ°λ λμ κ°λ μ΄ μλ μμ μλ CPUλ₯Ό ꡬ맀ν¨μ μμ΄ μ±λ₯μ μ’μ°νλκ²μ ν΄λμ΄ μ λμ μΈ κΈ°μ€μΉμμ§λ§, κ·Όλμ κ°μ΄ νκ°μ CPU λ΄λΆμμ 2κ° λλ 4κ°, 6κ°, 8κ° λ± μ μ½μ΄λ₯Ό μ¬λ¬κ° μ§μ΄λ£μ λ©ν°μ½μ΄ μ νκ΅°λ€μ΄ μΆμλ¨μΌλ‘μ¨ μ΄μ κ³Ό κ°μ κΈ°μ€μ μΌλ‘ μ±λ₯μ λΉκ΅νκΈ°μλ λ¬Έμ κ° μλ€.
κ·ΈλΌ μ½μ΄λ 무μμΈκ°?
CPUμ ν΅μ¬μ μΈ μν μ μνν΄λ΄λ μ€μ¬λΆ μν μ λ§νλ©° μ΄ μ½μ΄μμ μμ€ν μ λͺ¨λ μ°μ°μ μ²λ¦¬νλ€κ³ 보면 λκ² λ€, μ¦ CPUμμμ μ½μ΄κ° λ§μ κ²½μ° μ»΄ν¨ν°μ μ±λ₯μ κ°μ₯ μ’μ°νλ€κ³ λ³Όμλ μκ² λ€, μ½μ΄μ κ°―μκ° λμ΄λ¨μ λ°λΌ λͺ μΉμ μλμκ°μ΄ μ¬μ©λλ€.
μ½μ΄ κ°―μ λͺ μΉ μ½μ΄ 1κ° μ±κΈμ½μ΄ μ½μ΄ 2κ° λμΌμ½μ΄ μ½μ΄ 4κ° μΏΌλμ½μ΄ μ½μ΄ 6κ° ν₯μ¬μ½μ΄ μ½μ΄ 8κ° μ₯νμ½μ΄ μ½μ΄ 10κ° λ°μΉ΄μ½μ΄ CPUμ μ±λ₯μ΄ λ§€λ λ§λ€ μ κ·Έλ μ΄λ λλ©΄μ λΆμ¬ν μ μλ ν΄λμ νκ³μΉκ° μκ³ , λκ°λν νκ³μ μ΄ μμ΄ μ΄ νκ³μ μ λ°μ΄λκΈ° μν΄ λ©ν° μ½μ΄λΌλ κ°λ λ§λ€μ΄ μ΄μ μ λ¨μΌμ½μ΄(μ±κΈμ½μ΄) μμμ 보μ¬μ£Όμλ μ±λ₯μ μ½μ΄λ₯Ό λλ¦ΌμΌλ‘μ¨ λ λ§μ μ°μ°μ²λ¦¬λ₯Ό ν μ μκ²λκ²μ΄λ€.
λ€μ μ§λ¬ΈμΌλ‘ λμκ°, κ·Έλ λ€λ©΄ CPUμ μ½μ΄ κ°μμ Thread κ°μμ μκ΄κ΄κ³λ 무μμΌκΉ?
CPU Threadλ CPUκ° μ 무λ₯Ό μννλ λ¨μλ₯Ό μλ―Ένλ€. μ¬μ ν μ μ°μ²λ¦¬λ μ½μ΄κ° λ΄λΉνμ§λ§, μ½μ΄κ° μ²λ¦¬νλ λ°μ΄ν°κ° μ°λ λλΌλ νλμ κ²½λ‘λ₯Ό ν΅ν΄ μ΄λνλ€λ λ»μ΄λ€.
κΈ°λ³Έμ μΌλ‘ ν κ°μ μ½μ΄ λΉ νλμ μ°λ λλ₯Ό κ°μ§λ κ²μ΄ μμΉμ΄λ€. κ·Έλ°λ°, μ½μ΄μ μ±λ₯μ΄ ν₯μ λ μλ‘, λ³λͺ©νμμ΄ λ°μνκ² λλ€.
μ½κ² μλ₯Ό λ€μ΄λ³΄λ©΄, μμ μ ν λͺ μ΄ 1λΆμ μ²λ¦¬ν μ μλ μ 무λμ 10μΈλ° λΉν΄, 1λΆ λμ κΈ°κ³μ ν¬μ ν μ μλ μ²λ¦¬λμ΄ 5λ°μ μλλ€λ©΄, κΈ°κ³κ° μμ μμ λ¬Όλ€μ μ²λ¦¬ν λμ κΈ°λ€λ €μΌ νκ³ μ΄λ μμ ν¨μ¨μ μ νλ₯Ό κ°μ Έμ¬ κ²μ΄λ€.
κ·Έλ λ€λ©΄, λ§μ½ μ΄ κΈ°κ³κ° 2κ°κ° μλ€λ©΄? μμ μλ κΈ°λ€λ¦΄ νμ μμ΄ μμ μ μλ£ν μ μμ κ²μ΄λ€.
μ΄μ²λΌ μ½μ΄μ μ±λ₯μ΄ μ’μμ§ μλ‘, μ΄λ¬ν λ³λͺ©νμμ΄ λ°μν μ λ°μ μκ³ , μ΄λ₯Ό ν΄κ²° νκΈ° μν΄ λ©ν°μ°λ λ©μ΄λΌλ κΈ°μ μ΄ κ°λ° λ κ²μ΄λ€. μΈν μ κ²½μ°μλ 'νμ΄νΌμ°λ λ©', AMDμμλ 'SMT'λΌκ³ λ λΆλ₯΄λ μ΄ κΈ°μ μ ν΅ν΄μ λ¨μΌ μ½μ΄μ ν λΉλλ μ°λ λλ₯Ό μ΄λ±λΆνμ¬ λ³λ ¬ μ μ° μ²λ¦¬λ₯Ό κ°λ₯νκ² νλ€.
π‘λ©ν°νμ€νΉ, λ©ν°μ°λ λλ 무μμΌκΉ?
λ©ν°νμ€νΉμ΄ νλμ μ΄μ 체μ μμμ μ¬λ¬ νλ‘μΈμ€κ° μ€νλλ κ²μ΄λΌλ©΄, λ©ν°μ€λ λλ νλμ νλ‘μΈμ€κ° μ¬λ¬ μμ μ μ¬λ¬ μ€λ λλ₯Ό μ¬μ©νμ¬ λμμ μ²λ¦¬νλ κ²μ μλ―Ένλ€.
λ©ν°μ€λ λμ μ₯μ
- Context-Switchingν λ 곡μ νκ³ μλ λ©λͺ¨λ¦¬λ§νΌμ λ©λͺ¨λ¦¬ μμμ μλ μ μλ€.
- μ€λ λλ νλ‘μΈμ€ λ΄μ Stack μμμ μ μΈν λͺ¨λ λ©λͺ¨λ¦¬λ₯Ό 곡μ νκΈ° λλ¬Έμ ν΅μ μ λΆλ΄μ΄ μ μ΄μ μλ΅ μκ°μ΄ λΉ λ₯΄λ€.
λ©ν°μ€λ λμ λ¨μ
- μ€λ λ νλκ° νλ‘μΈμ€ λ΄ μμμ λ§μ³λ²λ¦°λ€λ©΄ λͺ¨λ νλ‘μΈμ€κ° μ’ λ£λ μ μλ€.
- μμμ 곡μ νκΈ° λλ¬Έμ νμ°μ μΌλ‘ λκΈ°ν λ¬Έμ κ° λ°μν μλ°μ μλ€.
β νλ‘μΈμ€ κ°μ Context-Switching μμλ λ§μ μμ μμ€μ΄ λ°μνλ€. κ·Έλ¬λ μ€λ λ κ°μ Context-Switchingμμλ λ©λͺ¨λ¦¬λ₯Ό 곡μ νκ³ μλ λ§νΌ λΆλ΄μ λ μ μλ€. (μλ μ§λ¬Έμμ μ’λ μμ보μ.)
λ©ν°μ€λ λμ μ₯λ¨μ μμ κΌ μ§κ³ λμ΄κ°μΌ ν μ μ΄ λ°λ‘ λκΈ°ν λ¬Έμ λ€. μ£Όλ‘ Synchronization IssueλΌκ³ νλλ°, μ΄μ λν΄ μμΈν μ€λͺ νλ©΄ λ€μκ³Ό κ°λ€.
λ©ν°μ€λ λλ₯Ό μ¬μ©νλ©΄ κ°κ°μ μ€λ λ μ€ μ΄λ€ κ²μ΄ μ΄λ€ μμλ‘ μ€νλ μ§ κ·Έ μμλ₯Ό μ μ μλ€. λ§μ½ A μ€λ λκ° μ΄λ€ μμμ μ¬μ©νλ€κ° B μ€λ λλ‘ μ μ΄κΆμ΄ λμ΄κ° ν, B μ€λ λκ° ν΄λΉ μμμ μμ νμ λ, λ€μ μ μ΄κΆμ λ°μ A μ€λ λκ° ν΄λΉ μμμ μ κ·Όνμ§ λͺ»νκ±°λ λ°λ μμμ μ κ·Όνκ² λλ μ€λ₯κ° λ°μν μ μλ€.
μ΄μ²λΌ μ¬λ¬ μ€λ λκ° ν¨κ» μ μ λ³μλ₯Ό μ¬μ©ν κ²½μ° λ°μν μ μλ μΆ©λμ λκΈ°ν λ¬Έμ λΌκ³ νλ€. μ€μΌμ€λ§μ μ΄μ체μ κ° μλμΌλ‘ ν΄μ£Όμ§ μκΈ° λλ¬Έμ νλ‘κ·Έλλ¨Έκ° μ μ ν κΈ°λ²μ μ§μ ꡬνν΄μΌ νλ―λ‘ νλ‘κ·Έλλ°ν λ λ©ν°μ€λ λλ₯Ό μ¬μ©νλ €λ©΄ μ μ€ν΄μΌ νλ€.(β Thread Safeνκ² μ€κ³ν΄μΌνλ€.) λλ²κΉ κ³Όμ λ κΉλ€λ‘μμ§κΈ° λλ¬Έμ΄λ€.
λμμ± μ΄μμ λν΄μλ λ΄μ©μ΄ λ§μ λ°λ‘ κΈμ μμ±νκ² λ€. (λ§ν¬ μ²¨λΆ μμ )
π‘Threadκ° Process λ³΄λ€ Context-Switchingμ΄ λ λΉ λ₯Έ μ΄μ λ 무μμΌκΉ?
νλ§λλ‘ λ§νμλ©΄, λ©λͺ¨λ¦¬ μμμ 곡μ νκΈ° λλ¬Έμ΄λ€. μ€μ λ‘ κ³΅μ λλ λ°μ΄ν°κ° μκ³ μλ λ°μ΄ν°κ° μλ€. μ΄ λΆλΆμ μμμ Stackμ 곡μ νμ§ μλ μ΄μ μ μΌλ§₯μν΅ν μ΄μΌκΈ°λ€. λ€λ§ μΆκ°μ μΌλ‘ νκ°μ§ μ΄ν΄λ³΄μμΌ ν κ²μ μΊμλ©λͺ¨λ¦¬μ΄λ€.
μΊμλ©λͺ¨λ¦¬
- μΊμ λ©λͺ¨λ¦¬λ CPUμμ νλ² μ΄μ μ½μ΄ λ€μΈ λ©μΈ λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μλ€κ° CPUκ° λ€μ κ·Έ λ©λͺ¨λ¦¬μ μ μ₯λ λ°μ΄ν°λ₯Ό μꡬν λ λ©μΈ λ©λͺ¨λ¦¬λ₯Ό ν΅νμ§ μκ³ λ°λ‘ κ°μ μ λ¬νλ μ©λλ‘ μ¬μ©λλ€.
- νλ‘μΈμ€ μ¬μ΄μμ 곡μ νλ λ©λͺ¨λ¦¬κ° νλλ μκΈ° λλ¬Έμ, 컨ν μ€νΈ μ€μμΉμ΄ λ°μνλ©΄ μΊμ¬μ μλ λͺ¨λ λ°μ΄ν°λ₯Ό λͺ¨λ 리μ νκ³ λ€μ μΊμ¬ μ 보λ₯Ό λΆλ¬μμΌ νλ€.
- β μ°λ λλ μΊμ¬ μ 보λ₯Ό λΉμΈ νμκ° μκΈ° λλ¬Έμ νλ‘μΈμ€μ μ°λ λμ 컨ν μ€νΈ μ€μμΉ μλμ μ°¨μ΄λ μ΄λ λ°μνλ€.
cf) Windowsμμμ Processμ Thread
Windows μ μ₯μμ νλ‘μΈμ€λ μ°λ λλ₯Ό λ΄λ μμμ μ§λμ§ μλλ€. λν Windowsμμ νλ‘μΈμ€λ μν(Running, Ready, Blocked)μ μ§λμ§ μλλ€. μνλ₯Ό μ§λλ κ²μ μ€λ λμ΄λ€. μ€μΌμ€λ¬κ° μ€νμ λ¨μλ‘ μ ννλ κ²λ νλ‘μΈμ€κ° μλ μ€λ λμ΄λ€. νλ‘μΈμ€ 컨ν μ€νΈ μ€μμΉ μμ μ€μ λ‘ μ€λ²ν€λκ° λ°μνλ λΆλΆμ μλ‘ λ€λ₯Έ νλ‘μΈμ€μ ν¬ν¨λ μ€λ λ κ°μ 컨ν μ€νΈ μ€μμΉμ λ°μνλ€.
πReference
https://brownbears.tistory.com/39
https://techvu.dev/87
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://militstory.com/2
https://crone.tistory.com/423'κ°λ° > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ