π©π» λ©ν° νμ€νΉ & λ©ν° νλ‘μΈμ± κ°λ νλ°© μ 리
μ»΄ν¨ν°μ λ³ν μ²λ¦¬
μ°λ¦¬κ° μμ μ λ€μΌλ©΄μ, μΉμνμ νκ³ , λ©μ μ μ λ©μμ§λ₯Ό νμΈν μ μλ μ΄μ λ μ»΄ν¨ν°κ° μμμ ν¨μ¨μ μΌλ‘ μ¬μ©νλ λ©ν° νμ€νΉ(Multi Tasking) κΈ°μ λλΆμ΄λ€. λ©ν° νμ€νΉμ΄λ μ»΄ν¨ν°μμ μ¬λ¬ μμ μ λμμ μ€ννλ λ₯λ ₯μ λ§νλ€. μ’λ μμΈν λ§νμλ©΄, OSλ₯Ό ν΅ν΄ CPUκ° μμ νλλ° νμν μμμ νλ‘μΈμ€ λλ μ€λ λκ°μ λλλ νμλ₯Ό λ§νλ€. λ κ°μ§ μ΄μ μμ μ λμμ μ²λ¦¬ν μ μλ μ΄μ κ° μ΄λ¬ν μμ λΆλ΄ μ리 λλ¬Έμ΄λ€.
μ§κΈ λΆν° μ νλ μμμ κ°μ§κ³ μμκ°μ§μ νλ‘κ·Έλ¨μ λμμ μ€νν μ μλ μ리λ₯Ό νν€μ³ 보μ.
νλ‘μΈμ±μ λ°μ κ³Όμ
λ¨μΌ νλ‘μΈμ€ (Single Process)
μ΄μ°½κΈ° μ»΄ν¨ν°λ λ¨μΌ νλ‘μΈμ€ μμ€ν μ΄μλ€. νλ²μ νλμ νλ‘κ·Έλ¨λ§μ΄ μ€νν μ μμ΄μ, λ λ€λ₯Έ νλ‘κ·Έλ¨μ μ€ννκ³ μΆλ€λ©΄ νμ¬ νλ‘κ·Έλ¨μ μ’ λ£ν΄μΌ νλ€. κ±°κΈ°λ€ CPU μ¬μ©λ₯ μ΄ ν¨μ¨μ μ΄μ§ λͺ»νλλ°, νλ‘κ·Έλ¨ μ€ν λμ€ I/O(μ μΆλ ₯) μμ κ³Ό κ°μ μΌμ΄ μκΈ°κ² λλ©΄ CPUλ νλ‘μΈμ€λ₯Ό λ©μΆκ³ κ·Έλλ‘ λμλ²λ¦¬κΈ° λλ¬Έμ΄λ€.
IO(input/output) μ΄λ?
νν νλ‘κ·Έλλ°μμ IO λΌκ³ νλ©΄ λνμ μΌλ‘ 3κ°μ§ λ»μ λ΄ν¬νκ³ μλ€.
- νμΌμ μ½κ³ μ°λ κ²
- μλ² λ€νΈμν¬μ μ΄λκ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ²
- λ§μ°μ€, ν€λ³΄λμ κ°μ μ μΆλ ₯ μ₯μΉμ λ°μ΄ν°λ₯Ό μ£Όκ±°λ λ°λ κ²
λ©ν° νλ‘κ·Έλλ° (Multi Programming)
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬λ¬κ°μ νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬μ μ¬λ €λκ³ νλμ CPUμμ λ²κ°μ κ°λ©° λμμ μ€νμν€λ λ°©μμ μ²¨κ° νμλ€.
λ©ν° νλ‘κ·Έλλ°μ μ¬λ¬κ°μ νλ‘κ·Έλ¨μ΄ λμμ μ€νλλ€λ μλ―Έλ‘μ, CPU μ¬μ©λ₯ μ κ·Ήλν μν€λκ² λͺ©μ μ λμλ€. λ¨μΌ νλ‘μΈμ€μ λ¬Έμ μ μ΄μλ νλ‘μΈμ€ #1 μμ μμ ν I/O μμ μ λ§λκ² λλ©΄ CPUκ° λ Έλκ² μλλΌ νλ‘μΈμ€ #2 μμ μ μμνκ² λλ€. λ€μ νλ‘μΈμ€2 μμ μμ ν I/O μμ μ λ§λκ² λλ©΄ νλ‘μΈμ€1 μμ μ μμνκ² λλ€.
κ·Έλ¬λ μ΄λ ν νλ‘κ·Έλ¨μ΄ CPU μ¬μ© μκ°μ΄ κΈΈμ΄μ§λ©΄ λ€λ₯Έ νλ‘μΈμ€λ κ³μ λκΈ°λ₯Ό ν΄μΌ νλ€λ λ¬Έμ μ μ΄ μ‘΄μ¬ νμλ€. μμ κ·Έλ¦Όμμ P #1 μμ μκ°μ΄ μμ² κΈΈμ΄μ§ κ²½μ° P #2 λ μ€νλ κΈ°νμ‘°μ°¨ λͺ» μ»κ² λλ€.
λ©ν° νμ€νΉ (Multi Tasking)
λ©ν° νλ‘κ·Έλλ°μ μ·¨μ§λ μ’μμ§λ§ μ΄λν νλ‘μΈμ€κ° λͺ¨λ μ€νλμΌ λ€μ νλ‘μΈμ€κ° μ€νλ μ μλ νκ³μ μ΄ μμλ€. λ°λΌμ μ΄κ²μ ν΄κ²°νκΈ° μν΄ νλ‘μΈμ€λ νλ² CPUλ₯Ό μ¬μ©ν λ μμ£Ό 짧μ μκ°(quantum)λ§ μ€νλλλ‘ νμ¬ κ° νλ‘κ·Έλ¨μ μμ μ μμ£Ό μμ λ¨μλ‘ λ²κ°μ κ°λ©° μ²λ¦¬νλ©΄μ, μμ μλ΅ μκ°μ μ΅μν μν€λ λ©ν° νμ€νΉ μλ¦¬κ° νμνμλ€.
μ΄λ μκ² λλμ΄μ§ νλ‘μΈμ€ λΌλ¦¬ μμ μ΄ μ€μμΉ λλ κ²μ λ¬Έλ§₯ κ΅ν(Context Switching) μ΄λΌκ³ νλ€.
μ΄λ κ² νλ‘μΈμ€ μμ μ΄ μκ² λλμ΄μ Έ κ΅λλ‘ μ€νν¨μΌλ‘μ¨ μ»κ² λλ©΄ μ΄μ μ λ€μκ³Ό κ°λ€.
1. λΉ λ₯Έ λ°μμ± μ 곡
첫째, CPUκ° μκ² λλ κ° μμ λ€μ λΉ λ₯΄κ² λ²κ°μ κ°λ©° μνν¨μΌλ‘μ, μ¬λ¬ μμ μ λμμ μ²λ¦¬νλ κ²μ²λΌ 보μ΄κ² λ§λ€μ΄, μ¬μ©μμκ² λ λΉ λ₯Έ λ°μμ±μ μ 곡νμ¬ μ λ§λ‘ λμμ νλ‘κ·Έλ¨μ΄ μ€νλλ κ²μ²λΌ λκ»΄ μ°¨μ΄λ₯Ό λͺ»λλΌκ² λλ€.
2. λ¬Έμ ν΄κ²° μ©μ΄μ±
λμ§Έ, μμ μ λλμκΈ° λλ¬Έμ μκΈ°μΉ μμ λ¬Έμ κ° λ°μνμ λ, ν΄λΉ μμ λ§ μ€μ§ν μ μκ² λλ€. μ΄λ¬ν λ°©μμΌλ‘, μ 체 μμ€ν μ΄ λ©μΆλ κ²μ λ°©μ§ν μλ μλ€.
3. λ©ν° νλ‘μΈμμ ν¨μ¨μ μΈ νμ©
μ μ§Έ, λ©ν° νλ‘μΈμ± λλ λ©ν° μ½μ΄λ₯Ό μ¬μ©νλ μμ€ν μμ μ¬λ¬ κ°μ νλ‘μΈμ(CPU)κ° λμμ μμ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μλ€.
4. νλ‘μΈμ€ μ°μ μμ μ‘°μ
λ·μ§Έ, νλ‘μΈμ€ κ°μ μ°μ μμλ₯Ό μ‘°μ μ΄ μμν΄μ§λ€. μλ₯Όλ€μ΄ μ°μ μμκ° λμ μμ μ λ μμ£Ό μ€νλμ΄, λ λΉ λ₯Έ μ²λ¦¬λ₯Ό ν μλ μλ μ μ΄λ€.
λ°λΌμ, μμ μ μκ² λλμ΄ μ²λ¦¬νλ μ리λ λΉ λ₯Έ λ°μμ±μ μ 곡νλ ν΅μ¬ λΆλΆμΈ μ μ΄λ€. κ·Έλ¬λ μλ΅μ±μ ν₯μνκΈ° μν΄μ λ¬Έλ§₯ κ΅ν(Context Switching)μ΄ μμ£Ό μΌμ΄λκ² λ κ²½μ° μ€νλ € μ±λ₯ μ΄μκ° λ°μν μ μλ€λ λ¬Έμ μ μ΄ μλ€. μλνλ©΄ νλ‘μΈμ€ λΌλ¦¬ μ€μμΉ νλ μμ μ μ°λ¦¬κ° μκ°νλ κ² λ³΄λ€ κ½€λ λ¬΄κ±°μ΄ μμ μ ν΄λΉνκΈ° λλ¬Έμ΄λ€.
λ©ν° νλ‘μΈμ± (Multi Processing)
μλ μ»΄ν¨ν°μ CPUλ μ±κΈ μ½μ΄(core) μλ€. μ΄ μ±κΈ μ½μ΄μμ μ¬λ¬κ°μ μμ μ λμμ μ²λ¦¬νκΈ° μν΄ λ©ν° νμ€νΉκ³Ό κ°μ κΈ°μ μ μ°¨μ©ν΄ μμ μ μ²λ¦¬ν κ²μ΄λ€. κ·Έλ¬λ μλκ° λ°μ ν¨μ λμμ CPU μ½μ΄μ λ°μ΄ νκ³λ‘ μΈν΄ μ½μ΄ κΉ‘ ν΄λμ λμ΄μ§ μκ³ μ½μ΄λ₯Ό λ리λ λ°©ν₯μΌλ‘ λμΌ μ½μ΄, μΏΌλ μ½μ΄ CPU μ νμ μΆμνκΈ° μμνλ€.
μ»΄ν¨ν°λ₯Ό λ§μΆλ νλ² μ―€μ '4μ½μ΄ 8μ€λ λ'μ κ°μ CPU μ€νμ λν΄ λ€μ΄λ³Έμ μ΄ μμν λ° λ°λ‘ μ΄κ²μ λ§νλ κ²μ΄λ€.
μ¦, ν CPUμ λκ° μ΄μμ μ½μ΄λ₯Ό λ¬μ μ 체μ μΈ μ±λ₯μ ν₯μμν€λ λ°©ν₯μΌλ‘ μ νμ ν κ²μ΄λ€. κ·Έλ¦¬κ³ μ¬λ¬ κ°μ CPU μ½μ΄κ° λμμ μμ μ μ²λ¦¬νλ κ²μ λ©ν° νλ‘μΈμ± (Multi Processing) μ΄λΌ νλ€. μ΄λ¬ν λ©ν° νλ‘μΈμ±μ μν€ν μ³ κ΅¬μ‘°μ λ°λΌ μ’ λ₯λ μ¬λ¬κ°μ§ μ΄λ€.
λ©ν° νλ‘μΈμ± vs λ©ν° νμ€νΉ
λ©ν° νλ‘μΈμ± (Multi Processing)μ΄λ, μ¬λ¬ κ°μ CPU μ½μ΄κ° λμμ μμ
μ μ²λ¦¬νλ κ²μ μλ―Ένλ€. μ¬λ¬ κ°μ νλ‘μΈμκ° λ³λ ¬λ‘ μμ
μ μννλ―λ‘, λ¨μΌ νλ‘μΈμ€λ³΄λ€ λΉ λ₯Έ μ²λ¦¬ μλλ₯Ό 보μ₯ν μ μλ€.
λ©ν° νμ€νΉ (Multi Tasking)μ λ¨μΌ CPUμμ μ¬λ¬ κ°μ μμ
μ λμμ μ²λ¦¬νλ κ²μ μλ―Ένλ€. νλμ CPUκ° μ¬λ¬ μμ
λ€μ λ²κ°μκ°λ©° μ²λ¦¬νλ―λ‘, μ¬λ¬ κ°μ μμ
μ λμμ μννλ κ²μ²λΌ 보μ΄κ² λλ€.
λ°λΌμ, λμ μ¬λ¬ μμ
μ λν΄μ λμμ μ²λ¦¬νλ λͺ©μ μ λΉμ·νμ§λ§, λ©ν° νμ€νΉμ νλμ CPUμμ μ¬λ¬ κ°μ μμ
μ μ²λ¦¬νλ λ°λ©΄, λ©ν° νλ‘μΈμ±μ μ¬λ¬ κ°μ CPUκ° κ°κ°μ μμ
μ μ²λ¦¬νλ κ²μ΄λΌλ μ°¨μ΄μ μ΄ μλ€.
λ©ν° νλ‘μΈμ± + λ©ν° νμ€νΉ μ‘°ν©
λμ μλ‘ λ€λ₯Έ λμ μ²λ¦¬ λ°©λ²μ΄κΈ° λλ¬Έμ μ΄ λμ μ‘°ν©νμ¬ λμ± λ μλμ§ ν¨κ³Όλ₯Ό λ릴 μ μλ€.
λ©ν° νλ‘μΈμ± vs λ©ν° νλ‘μΈμ€
multi processing κ³Ό multi process λ μμ΄λ κ·Έμ λλͺ μ¬(-ing) μ°¨μ΄ μ΄μ§λ§, μ΄ λμ΄ μλ―Ένλ λ°λ μ ν λ€λ₯΄λ€. μλ§ λ§μ μ¬λλ€μ΄ μ΄ λμ νκΉλ € ν κ²μ΄λ€.
λ©ν° νλ‘μΈμ±μ νλμ μμ€ν
μμ μ¬λ¬ κ°μ νλ‘μΈμ(CPU)λ₯Ό μ¬μ©νμ¬ μμ
μ μ²λ¦¬νλ κ²μ μλ―Ένλ€. μ¦, νλ‘μΈμ(CPU)κ° λ©ν°μΈ κ²μ΄λ€. μ¬λ¬ κ°μ νλ‘μΈμκ° λμμ μμ
μ μ²λ¦¬νλ―λ‘, μ 체μ μΈ μ²λ¦¬ μλκ° λΉ¨λΌμ§λ ν¨κ³Όμ λͺ©μ μ λλ€.
λ°λ©΄, λ©ν° νλ‘μΈμ€λ νλμ μμ© νλ‘κ·Έλ¨μ μ¬λ¬ κ°μ νλ‘μΈμ€λ‘ λΆλ¦¬νμ¬ μ€ννλ κ²μ μλ―Ένλ κ²μ΄λ€. μ¦, νλ‘μΈμ€(process)κ° λ©ν°μΈ κ²μ΄λ€. μ¬λ¬ κ°μ νλ‘μΈμ€κ° λμμ μ€νλλ―λ‘, νλμ νλ‘μΈμ€κ° μ£½μ΄λ νλ‘κ·Έλ¨μ΄ μ£½μ§μμ νλ‘κ·Έλ¨ μ 체μ μμ μ±μ΄ λμμ§λ κ²μ λͺ©μ μ λλ€. λ³΄ν΅ λ©ν° νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€μ κ·Έμ μ¬λ¬ μμ νλ‘μΈμ€λ‘ μ΄λ£¨μ΄μ Έ μλ€.
# μ°Έκ³ μλ£
https://youtu.be/QmtYKZC0lMU
https://velog.io/@ashappyasikonw/Single-Process-System-Multi-programming-Multitasking-%EC%9D%B4%EB%9E%80
https://jenkov.com/tutorials/java-concurrency/concurrency-vs-parallelism.html
https://donghoson.tistory.com/15