1. νλ‘μΈμ€ vs μ€λ λ
- νλ‘μΈμ€ : μ€ν μ€μΈ νλ‘κ·Έλ¨
- μ€λ λ : νλ‘μΈμ€ λ΄λΆμμ μ€νλλ μμ
λ¨μ
κ²μ κ°λ°μμ μ΄λ»κ² μ°μΌκΉ?
κ²μμμ§μ λ©ν°μ€λ λ©μ μ¬μ©ν΄μ μ¬λ¬ μμ
μ λμμ μ€νν¨
- λ λλ§ μ€λ λ : κ·Έλν½ μ°μ° λ΄λΉ
- 물리 μμ§ μ€λ λ : μΆ©λ κ°μ§ μΊλ¦ν° μμ§μ κ³μ°
- AI μ€λ λ : NPC νλ μ°μ°
- μ€λμ€ μ€λ λ : λ°°κ²½μμ
κ³Ό ν¨κ³Όμ μ²λ¦¬
λ©ν°μ€λ λ©μ μλͺ» μ°λ©΄?
- λ°μ΄ν° μΆ©λ(λ μ΄μ€ 컨λμ
)μ΄ λ°μ
- λκΈ°ν λ¬Έμ λ‘ μΈν΄ μ±λ₯ μ ν
ν΄κ²° λ°©λ² : λ½(lock) μ΅μν, μ°λ λ μμ ν λ°μ΄ν° ꡬ쑰 μ¬μ©
2. 컨ν μ€νΈ μ€μμΉκ³Ό μ€λ²ν€λ
- 컨ν
μ€νΈ μ€μμΉ(Context Switching) : CPUκ° μ¬λ¬ μμ
μ λ²κ°μ μ€νν λ, μμ
κ° μ νμ μν μ μ₯/볡ꡬ κ³Όμ
- νλμ CPUκ° μ¬λ¬ κ°μ μμ
(νλ‘μΈμ€ λλ μ€λ λ)μ μ€νν λ, νμ¬ μμ
μ μν(Context)λ₯Ό μ μ₯νκ³ λ€μ μμ
μ μνλ‘ λ³κ²½νλ κ³Όμ
- μ΄μ체μ (OS)κ° μμ
μ ν¨μ¨μ μΌλ‘ λΆλ°°νκΈ° μν΄ μνν¨
컨ν μ€νΈ(Context)λ?
- CPUκ° νμ¬ μ€ν μ€μΈ μμ
μ μν μ 보λ₯Ό λ»ν¨
- ν¬ν¨λλ μ 보
- νλ‘κ·Έλ¨ μΉ΄μ΄ν°(νμ¬ μ€ν μ€μΈ λͺ
λ Ήμ΄ μμΉ)
- CPU λ μ§μ€ν° κ°
- λ©λͺ¨λ¦¬ 맀ν μ 보
- μ€μΌμ₯΄λ§ μ 보
컨ν μ€νΈ μ€μμΉ κ³Όμ
컨ν
μ€νΈ μ€μμΉμ CPUκ° λ€λ₯Έ μμ
μ μ€νν λ λ°λμ κ±°μ³μΌ νλ κ³Όμ
1. νμ¬ μ€ν μ€μΈ μ€λ λ/νλ‘μΈμ€μ μνλ₯Ό μ μ₯ (PCB : Process Control Block)
2. μλ‘μ΄ μ€λ λ/νλ‘μΈμ€λ₯Ό μ ν (μ€μΌμ€λ¬κ° κ²°μ )
3. μλ‘μ΄ μμ
μ μνλ₯Ό λΆλ¬μ μ€ν
μ΄ κ³Όμ μμ CPUμ κ³μ° μκ°μ΄ λλΉλκΈ° λλ¬Έμ μ€λ²ν€λκ° λ°μν¨
κ²μ κ°λ°μμ μ΄λ»κ² μν₯μ μ€κΉ?
κ²μμ μ¬λ¬ κ°μ μ€λ λλ₯Ό μ¬μ©νμ§λ§, κ³Όλν 컨ν
μ€νΈ μ€μμΉμ΄ λ°μνλ©΄ μ±λ₯μ΄ μ νλ¨
- AI, 물리 μμ§, λ λλ§μ΄ λμμ μ€νλ λ 컨ν
μ€νΈ μ€μμΉμ΄ λ무 λ§μΌλ©΄ CPU μκ°μ΄ λλΉλ¨
μ΅μ ν λ°©λ²
- μ€λ λ κ°μλ₯Ό μ μ νκ² μ μ§ (λ무 λ§μΌλ©΄ μ€λ²ν€λ μ¦κ°)
- 물리 μ½μ΄ μλ³΄λ€ λ§μ μ€λ λλ₯Ό μμ±νλ©΄ μ±λ₯ μ νκ° μ¬ν΄μ§
- μμ
μ κ·Έλ£Ήννμ¬ ν λ²μ μ€ν (μΊμ λ―Έμ€λ₯Ό μ€μ΄κΈ° μν΄)
3. λκΈ°(Synchronous) vs. λΉλκΈ°(Asynchronous) μ°μ°
- λκΈ° λ°©μ : νλμ μμ
μ΄ λλμΌ λ€μ μμ
μ μ€ν
- λΉλκΈ° λ°©μ : μ¬λ¬ μμ
μ λμμ μ€ν κ°λ₯
κ²μ κ°λ°μμ μ΄λ»κ² μ°μΌκΉ?
κ²μμμ λ‘λ©μ μ΅μ ννκΈ° μν΄ λΉλκΈ° λ‘λ©(Async Loading)μ νμ©ν¨
- ν
μ€μ², μ€λΈμ νΈλ₯Ό λΉλκΈ° λ‘λνλ©΄ νλ μ λλ μμ΄ μ§ν κ°λ₯
- λ€νΈμν¬ ν΅μ (λ©ν°νλ μ΄ κ²μ)μμ μλ² μλ΅μ κΈ°λ€λ¦¬μ§ μκ³ UIλ₯Ό κ³μ μ
λ°μ΄νΈ κ°λ₯
μμ (Unity, Unreal)
- Unity : Resources.LoadAsync()
- Unreal Engine : Async Loading System
λΉλκΈ° λ‘λ©μ μλͺ» μ°λ©΄?
- λΉλκΈ° μμ
κ° μ°μ μμ λ¬Έμ λ°μ
- λ©λͺ¨λ¦¬ λΆμ‘±μΌλ‘ ν¬λμ λ°μ κ°λ₯
ν΄κ²° λ°©λ² : νμ μλ 리μμ€λ μ¦μ μΈλ‘λ
4. μΊμ λ©λͺ¨λ¦¬μ μΊμ λ―Έμ€(Cache Miss)
- CPU μΊμ(Cache Memory) : μμ£Ό μ¬μ©νλ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ κ·ΌνκΈ° μν μ΄κ³ μ λ©λͺ¨λ¦¬
- μΊμ λ―Έμ€(Cache Miss) : CPUκ° μνλ λ°μ΄ν°κ° μΊμμ μμ λ RAMμμ κ°μ Έμ€λ μν© (μλ μ ν)
κ²μ κ°λ°μμ μ΄λ»κ² μ΅μ νν κΉ?
CPU μΊμλ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νλ©΄ νλ μ λλμ μ€μΌ μ μμ
- μ°μλ λ°μ΄ν° ꡬ쑰(λ°°μ΄) μ¬μ© -> λ©λͺ¨λ¦¬ μ κ·Ό μλ ν₯μ
- ꡬ쑰체 ν¬κΈ° μ΅μ ν -> μΊμ λΌμΈμ λ§κ² λ°μ΄ν° λ°°μΉ
λΉν¨μ¨μ μΈ μ½λ(μΊμ λ―Έμ€ λ°μ κ°λ₯)
struct Data{
int id;
float posX,posY,posZ;
};
Data data[1000];
- λ©λͺ¨λ¦¬ μμμ λΆκ·μΉν λ°°μΉ
μΊμ μΉνμ μ½λ
struct Data{
int ids[1000];
float posX[1000],posY[1000],posZ[1000];
};
Data data;
- λ°μ΄ν°λ₯Ό μ°μλ λ°°μ΄λ‘ μ μ₯νλ©΄ CPU μΊμ ν¨μ¨μ΄ μ¦κ°ν¨