λ¨Όμ , μλ°μ€ν¬λ¦½νΈ μμ§μ λν΄ μμμΌ ν©λλ€.
μλ°μ€ν¬λ¦½νΈ μμ§
- μλ°μ€ν¬λ¦½νΈ μμ§ μμλ Memory Heap κ³Ό Call Stack λ‘ λλμ΄ μμ΅λλ€.
- Memory Heap
- λ°μ΄ν°λ₯Ό λ§λ€ λ, μ¦ λ³μλ₯Ό μ μΈν΄μ μ€λΈμ νΈλ₯Ό ν λΉνκ±°λ λ¬Έμ λλ μ«μλ₯Ό ν λΉνκ² λλ©΄ μ λΆ λ©λͺ¨λ¦¬ νμ μ μ₯ λ©λλ€.
- λ©λͺ¨λ¦¬ ν λΉμ΄ μΌμ΄λλ κ³³
- Call Stack
- ν¨μλ₯Ό μ€ννλ μμμ λ°λΌμ 차곑차곑 μμλλ κ²
- μ½λ μ€νμ λ°λΌ νΈμΆ μ€νμ΄ μμ΄λ κ³³
- LIFO(Last In First Out) : μ μΌ λμ€μ λ€μ΄μ¨ κ²μ΄ μ μΌ μ²μμΌλ‘ λκ°λλ€.
λ°νμ νκ²½
- μλ°μ€ν¬λ¦½νΈ μΈμ΄ μ체μλ λ©ν° μ€λ λ©μ΄ μμ΅λλ€.
Process
- μ΄μ체μ μμμ μ°μμ μΌλ‘ μ€νλκ³ μλ νλ‘κ·Έλ¨
- λ 립μ μΌλ‘ λ©λͺ¨λ¦¬μμ μ€ν ν©λλ€.
- κ°κ°μ νλ‘μΈμ€λ μμ(리μμ€)λ€μ΄ μ ν΄μ Έ μμ΅λλ€.
- νλ‘μΈμ€ μμλ
- code : νλ‘κ·Έλ¨μ μ€ννκΈ° μν μ½λ
- stack : νλ‘μΈμ€ μμμ ν¨μλ€μ΄ μ΄λ€ μμλ‘ μ€νλμ΄μΌ νλμ§, ν¨μκ° λλλ©΄ μ΄λλ‘ λ€μ λμκ°λμ§μ λν μ 보
- Heap : μ€λΈμ νΈλ₯Ό μμ±νκ±°λ λ°μ΄ν°λ₯Ό λ§λ€ λ, λ°μ΄ν°λ€μ΄ μ μ₯λλ κ³΅κ° [ λμ μΌλ‘ ν λΉλ λ³μκ° μ μ₯ ]
- Data : μ μ λ³μλ μ€νν± λ³μλ€μ΄ ν λΉ
Thread
- ν νλ‘μΈμ€ μμμ μ¬λ¬ κ° λμν μ μλλ° κ°κ° μ λ§λ€ ν΄μΌ λλ μ무λ₯Ό λ°μ΅λλ€.
- μ¦, ν νλ‘μΈμ€ μμμ λμμ κΈ°λ₯μ μννλ μ¬λ¬ κ°μ Threadκ° μμ±
- μμ ) νλ‘κ·Έλ¨μμ μμ
μ λ€μΌλ©΄μ μ¬μ§μ νΈμ§ν μ μλ μ΄ν리μΌμ΄μ
μ΄ μλ€λ©΄,
κ°κ° μ€λ λλ μμ μ μ¬μνλ μ€λ λμ μ¬μ§μ νΈμ§νλ μ€λ λκ° μμ΅λλ€.
JavaScript λ
- κΈ°λ³Έμ μΌλ‘ μ±κΈ μ€λ λ κΈ°λ° μΈμ΄ μ λλ€.
- μ¦, νΈμΆ μ€νμ΄ νλ. λ°λΌμ ν λ²μ νλμ μμ λ§ μ²λ¦¬κ° κ°λ₯ ν©λλ€.
- νμ§λ§, μλ°μ€ν¬λ¦½νΈκ° λμνκ³ μλ λΈλΌμ°μ μμλ μ¦, λΈλΌμ°μ λΌλ νλ‘κ·Έλ¨ μμμλ μ¬λ¬ κ°μ§μ μ€λ λκ° λ€μ΄μμ΅λλ€.
- web API's μ Event Loop λ±μ μ¬μ©νμ¬ λ©ν° μ€λ λ©μ΄ κ°λ₯νλ€.
Event Loop
- Call Stack κ³Ό Task Queueμ μνλ₯Ό μ²΄ν¬ λ³΄λ©΄μ Call Stackμ΄ μ€ν μ€μ΄λ©΄ κΈ°λ€λ Έλ€κ°
- Call Stackμ ν¨μκ° λͺ¨λ μ€νλκ³ μμ ν λΉμμ§λ©΄
- Task Queueμ 첫 λ²μ§Έ callback ν¨μλ₯Ό Call Stackμ νλμ© μΆκ°νμ¬
- μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ°¨λ‘λλ‘ μνν μ μλλ‘ ν΄μ€λλ€.
Task Queue
- μλ°μ€ν¬λ¦½νΈ λ°νμ νκ²½μμ λΉλκΈ°μ μΌλ‘ μ€νλλ callback ν¨μλ₯Ό 보κ΄νλ 곡κ°
- Call Stack μ΄ λΉ μνκ° λλ©΄, Event Loop μ μν΄ Task Queueμ μ μ₯λ μμλλ‘ νλμ© Call StackμΌλ‘ μ΄λ ν©λλ€.
μμ
function first(){
console.log('first')
}
function second(){
console.log('second')
}
function thrid(){
console.log('thrid')
}
first()
setTimeout(()=> second(),2000)
thrid()
- first() κ° νΈμΆλλ©΄μ call stack μ μΆκ°λκ³ , fisrt() μ€ν
- consoleμ firstκ° μΆλ ₯λκ³ , first() μ€νμ΄ λλλ©΄ call stack μ first() κ° μμ λκ³ λΉμμ§λλ€.
- setTimeout(()=> second(),2000) νΈμΆλκ³ , call stackμ μΆκ°
- setTimeout()μ΄ μ€νλλ©΄μ λΈλΌμ°μ κ° μ 곡νλ web APIλ₯Ό νΈμΆνκ³ call stackμμ μ κ±°. web API μμλ Timerκ° μ€ν
- web API μμλ timer κ° μ€νλλ λμ thrid() κ° νΈμΆλκ³ , third()κ° call stackμ μΆκ°
- consoleμ thirdκ° μΆλ ₯λκ³ , thrid() μ€νμ΄ λλλ©΄ call stack μ thrid() κ° μμ λκ³ λΉμμ§λλ€.
- 2000ms κ° μ§λ timerκ° μ’ λ£λλ©΄ callback ν¨μ second()λ₯Ό Task Queueμ μ μ₯
- Event Loopλ call stackμ΄ λΉμ΄μλ κ²μ νμΈνκ³ Task Queueμ μλ ν¨μλ₯Ό call stackμ μΆκ°
- second()κ° μ€νλμ΄ consoleμ secondκ° μΆλ ₯λκ³ , second() μ€νμ΄ λλλ©΄ call stack μ second()κ° μμ λκ³ λΉμμ§λλ€.
μ°Έκ³
'π Front-End > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
class (0) | 2022.11.16 |
---|---|
μμ±μ ν¨μ (0) | 2022.11.16 |
μ΄λ²€νΈ λ²λΈλ§, μ΄λ²€νΈ μΊ‘μ²λ§, μ΄λ²€νΈ μμ (0) | 2022.11.16 |
Callback Function (0) | 2022.11.16 |
ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμμ μ°¨μ΄μ (0) | 2022.11.16 |