πŸ›΅ [JS] | βš™οΈ 비동기와 JS ENGINE , JS의 μž‘λ™μ›λ¦¬

사진 좜처

✨ http://latentflip.com/loupe πŸ‘

πŸ‘† μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ JS ENGINEμ—μ„œ μ–΄λ–»κ²Œ μž‘λ™λ˜λŠ”μ§€ λ³΄μ—¬μ£ΌλŠ” μ‚¬μ΄νŠΈ

이 μ‚¬μ΄νŠΈλŠ” κ·Έ μ € λΉ›....✨
μ΄λ ‡κ²Œ 쒋은 μ‚¬μ΄νŠΈ λ§Œλ“€μ–΄μ£Όμ…”μ„œ 정말 정말 κ°μ‚¬ν•©λ‹ˆλ‹€~!!!

βš™οΈ JS의 μž‘λ™μ›λ¦¬, JS ENGINE

사진과 μ„€λͺ… 좜처

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λΉ„λ™κΈ°λ‘œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ“€μ€ 호좜 μŠ€νƒ(CALL STACK)에 μŒ“μ΄μ§€ μ•Šκ³  TASK QUEUE둜 보내진닀.
  • 비동기 μ²˜λ¦¬λž€ νŠΉμ • μ½”λ“œκ°€ μ’…λ£Œλ˜μ§€ μ•Šμ•˜μ–΄λ„ λŒ€κΈ°ν•˜μ§€ μ•Šκ³  λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” μžλ°”μŠ€λ¦½νŠΈ νŠΉμ„±μ΄λ‹€.
  • EVENTLOOP은 CALL STACK이 λΉ„μ–΄μžˆμ„ λ•Œλ§Œ TASK QUEUE의 ν•¨μˆ˜λ₯Ό CALL STACK으둜 κ°€μ Έμ˜¨λ‹€.
  • μ½œλ°±ν•¨μˆ˜ : λ‹€λ₯Έ ν•¨μˆ˜μ— 인수둜 λ„˜κ²¨μ§€λŠ” ν•¨μˆ˜

βš™οΈ 동기 vs 비동기

사진과 μ„€λͺ… 좜처

πŸ”Ή 비동기

  • λΆ„μ‚°μ²˜λ¦¬

  • λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ 일을 ν•˜λ„λ‘ μ‹œν‚€κ³  λ‚˜μ„œ
    κ·Έ 일이 λλ‚˜λŠ” 것에 관심이 μ—†κ³ 
    λ°”λ‘œ λ‹€μ‹œ λ‚΄ 자리둜 λŒμ•„μ™€μš”.

  • μž‘μ—…μ„ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ μ‹œν‚€κ³  기닀리지 μ•Šμ•„μš”.

  • ν•΄λ‹Ή μŠ€λ ˆλ“œμ—μ„œ λ‹€λ₯Έ 일처리λ₯Ό μ‹œμž‘ν•  수 μžˆμ–΄μš”.

  • 일단 μž‘μ—…μ„ λ‹€λ₯Έ 곳으둜 λ³΄λ‚΄μš”.
  • 그리고 κ·Έ 일이 λλ‚˜λ˜μ§€ λ§λ˜μ§€ λ‚˜λŠ” μ „ν˜€ κ΄€μ—¬ν•˜μ§€ μ•Šμ•„μš”.

πŸ‘‰ μž‘μ—…μ„ λ‹€λ₯Έ μ“°λ ˆλ“œμ—μ„œ ν•˜λ„λ‘ μ‹œν‚¨ ν›„, κ·Έ μž‘μ—…μ΄ λλ‚˜κΈΈ "μ•ˆ 기닀리고" λ‹€μŒ 일을 μ§„ν–‰ν•œλ‹€. μ•ˆ 기닀렀도 λ‹€μŒ μž‘μ—…μ„ 생성할 수 μžˆλ‹€.

πŸ”Ή 동기

πŸ‘‰ μž‘μ—…μ„ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ ν•˜λ„λ‘ μ‹œν‚¨ν›„, λ‹€λ₯Έ μž‘μ—…μ„ ν•˜μ§€ λͺ»ν•˜κ²Œ blockν•˜κ³  λ§‰κ³ μ„œλŠ”, κ·Έ μž‘μ—…μ΄ κΈ‘λ‚˜κΈΈ "κΈ°λ‹€λ Έλ‹€κ°€" λ‹€μŒ 일을 μ§„ν–‰ν•œλ‹€. κ·Έ μž‘μ—…μ΄ λλ‚˜κΈΈ 기닀리고 있기 λ•Œλ¬Έμ— ν•΄λ‹Ή μŠ€λ ˆλ“œμ—μ„œλŠ” μž‘μ—…μ²˜λ¦¬λ₯Ό λͺ»ν•˜κ³  μžˆλ‹€. κΈ°λ‹€λ Έλ‹€κ°€ λ‹€μŒ μž‘μ—…μ„ 생성할 수 μžˆλ‹€.

πŸ”Ή "비동기"λΌλŠ” κ°œλ…μ΄ ν•„μš”ν•œ 이유?

πŸ‘‰ μ„œλ²„μ™€μ˜ 톡신(λ„€νŠΈμ›Œν¬ μž‘μ—…) λ•Œλ¬Έμ˜ˆμš”.

πŸ”Ή 비동기 πŸ‘‰ 큐(QUEUE) Β Β Β Β  πŸ”Ή 동기 πŸ‘‰ μŠ€νƒ(STACK)


βš™οΈ 직렬처리 vs λ™μ‹œμ²˜λ¦¬

사진과 μ„€λͺ… 좜처

πŸ”Ή 직렬처리 큐 (직렬처리)

  • λ©”μΈμŠ€λ ˆλ“œμ—μ„œ ν•˜λ˜ μž‘μ—…μ„ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ 보내긴 ν•  건데, λ‹€λ₯Έ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ‘œλ§Œ λ³΄λ‚΄λŠ” κ°œλ…μ΄μ˜ˆμš”

πŸ‘‰ (보톡 λ©”μΈμ—μ„œ) λΆ„μ‚°μ²˜λ¦¬ μ‹œν‚¨ μž‘μ—…μ„ "λ‹€λ₯Έ ν•œ 개의 μ“°λ ˆλ“œμ—μ„œ" μ²˜λ¦¬ν•΄μš”. μˆœμ„œκ°€ μ€‘μš”ν•œ μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©ν•΄μš”.

πŸ”Ή λ™μ‹œμ²˜λ¦¬ 큐 (λ™μ‹œμ²˜λ¦¬)

  • λΆ„μ‚° μ²˜λ¦¬μ—μ„œ 보낸 μž‘μ—…λ“€μ΄ ν•œκ°œμ˜ μŠ€λ ˆλ“œκ°€ μ•„λ‹Œ μ—¬λŸ¬κ°œμ˜ μŠ€λ ˆλ“œλ‘œ λΆ„μ‚°λ˜μ–΄ μ²˜λ¦¬λΌμš”.

πŸ‘‰ (보톡 λ©”μΈμ—μ„œ) λΆ„μ‚°μ²˜λ¦¬ μ‹œν‚¨ μž‘μ—…μ„ "λ‹€λ₯Έ μ—¬λŸ¬κ°œμ˜ μŠ€λ ˆλ“œμ—μ„œ" μ²˜λ¦¬ν•΄μš”. 각자 λ…λ¦½μ μ΄μ§€λ§Œ (μ€‘μš”λ„λ‚˜ μž‘μ—…μ˜ 성격 λ“±) μœ μ‚¬ν•œ μ—¬λŸ¬κ°œμ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©ν•΄μš”.

πŸ”Ή "직렬처리"κ°€ ν•„μš”ν•œ 이유?

πŸ‘‰ μž‘μ—…μ— μˆœμ„œκ°€ ν•„μš”ν•  μˆ˜λ„ 있기 λ•Œλ¬Έμ˜ˆμš”.

πŸ”Ή "비동기" vs "λ™μ‹œ"

"비동기" πŸ‘‰ μž‘μ—…μ„ λ³΄λ‚΄λŠ” μŠ€λ ˆλ“œμ™€ κ΄€λ ¨λœ λ§μ΄μ˜ˆμš”. 메인 μŠ€λ ˆλ“œμ—μ„œ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ 보낸 μž‘μ—…μ„ 기닀릴지 말지에 κ΄€λ ¨λœ κ°œλ…μ΄μ˜ˆμš”.

"λ™μ‹œ" πŸ‘‰ λ©”μΈμŠ€λ ˆλ“œμ—μ„œ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ 보낼 λ•Œ λ³΄λ‚΄μ§€λŠ” μŠ€λ ˆλ“œκ°€ ν•œ κ°œλƒ μ—¬λŸ¬ κ°œλƒμ— κ΄€λ ¨λœ κ°œλ…μ΄μ˜ˆμš”.


πŸ”Ή μ°Έκ³ 

πŸƒ INGGμ‚¬μ΄νŠΈμ˜ [JS] Javascript λ™μž‘ 원리와 λΉ„λ™κΈ°μ²˜λ¦¬ λΌλŠ” κΈ€μ˜ μ„€λͺ…κ³Ό 사진을 μ΄μš©ν–ˆμ–΄μš”.

INGGμ‚¬μ΄νŠΈ λ°”λ‘œκ°€κΈ°

πŸƒ μΈν”„λŸ° μ‚¬μ΄νŠΈμ˜ [κ·Έλ¦ΌμœΌλ‘œμ΄ν•΄ν•˜λŠ”] 동기(sync) 비동기(async)의 κ°œλ…μ— λŒ€ν•œ κ°€μž₯ 직관적인 이해 λΌλŠ” κ°•μ˜μ˜ μ„€λͺ…κ³Ό μ˜μƒμ„ μ΄μš©ν–ˆμ–΄μš”.

κ°•μ˜ λ°”λ‘œκ°€κΈ°

profile
λͺ‡ λ²ˆμ„ λ„˜μ–΄μ Έλ„ μ•žμœΌλ‘œ 계속 λ‚˜μ•„κ°€μž

0개의 λŒ“κΈ€