250x250
Rainbow๐ŸŒˆCoder
My dev Note๐Ÿ“’
Rainbow๐ŸŒˆCoder
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (411)
    • ๊ณต์ง€์‚ฌํ•ญ (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ • (3)
      • React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ (6)
      • next.js (2)
      • pixi.js (7)
    • ๋งˆํฌ์—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • ์ด๊ฒƒ์ด C#์ด๋‹ค (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(๊ธฐ์ดˆ) (8)
      • Unity(C#์ค‘๊ธ‰) (5)
      • ์œ ๋‹ˆํ‹ฐ ํฌํ†ค(๋„คํŠธ์›Œํฌ) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • ์Šคํ”„๋ง (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (15)
      • ์ž๋ฃŒ๊ตฌ์กฐ (5)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
    • ํ˜•์ƒ๊ด€๋ฆฌ (15)
      • Git (11)
      • ์†Œ์ŠคํŠธ๋ฆฌ (3)
    • ๊ทธ๋ž˜ํ”ฝ์Šค (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • ๋ฆฌ๋ˆ…์Šค (5)
      • ๋ฆฌ๋ˆ…์Šค (5)
    • ์ฑ… ๋ฆฌ๋ทฐ (13)
      • ํด๋ฆฐ์ฝ”๋“œ(์ฑ…๋ฆฌ๋ทฐ) (3)
      • ์œ ์ง€๋ณด์ˆ˜๊ฐ€๋Šฅํ•œ์ฝ”๋”ฉ์˜๊ธฐ์ˆ C#ํŽธ(์ฑ…๋ฆฌ๋ทฐ) (1)
      • ๋ฆฌํŒฉํ† ๋ง(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํŒ) (9)
    • Server (2)
      • ๊ฒŒ์ž„ ์„œ๋ฒ„(๋„คํŠธ์›Œํฌ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ,OS) (2)
    • ์„ค๊ณ„, ์•„ํ‚คํ…์ณ (4)
    • ํŒŒ์ด์ฌ (5)
    • ๋””์ž์ธํŒจํ„ด (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • ์ธ๊ณต์ง€๋Šฅ (1)
      • ํ˜ผ์ž๊ณต๋ถ€ํ•˜๋Š”๋จธ์‹ ๋Ÿฌ๋‹+๋”ฅ๋Ÿฌ๋‹ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • MySQL
  • ์ปดํฌ์ง€์…˜
  • ใ…ฃใ„ท
  • ์œ„์ž„

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Rainbow๐ŸŒˆCoder

My dev Note๐Ÿ“’

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ, ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ, ์ฝœ๋ฐฑํ•จ์ˆ˜
Javascript/Javascript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ, ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ, ์ฝœ๋ฐฑํ•จ์ˆ˜

2022. 5. 29. 17:08
728x90

https://www.freecodecamp.org/news/synchronous-vs-asynchronous-in-javascript/

 

Synchronous vs Asynchronous JavaScript – Call Stack, Promises, and More

Let me start this article by asking, "What is JavaScript"? Well, here's the most confusing yet to-the-point answer I have found so far: > JavaScript is a single-threaded, non-blocking, asynchronous, concurrent programming language with lots of flexibility.

www.freecodecamp.org

https://poiemaweb.com/js-event

 

Event | PoiemaWeb

์ด๋ฒคํŠธ(event)๋Š” ์–ด๋–ค ์‚ฌ๊ฑด์„ ์˜๋ฏธํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ ์ด๋ฒคํŠธ๋ž€ ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, ์›นํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜์—ˆ์„ ๋•Œ์™€ ๊ฐ™์€ ๊ฒƒ์ธ๋ฐ ์ด๊ฒƒ์€ DOM ์š”์†Œ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ

poiemaweb.com

์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์™€ ๋™์‹œ์„ฑ(Concurrency)

 

๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ(single-thread)์—์„œ ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ(event-driven) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋ฉฐ ์ด๋ง์€ ๊ณง ํ•˜๋‚˜์˜ ์ž‘์—…(task)๋งŒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋งŽ์€ task๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋А๊ปด์ง„๋‹ค. ์ด์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์‹œ์„ฑ(Concurrency)์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์ด๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ํ™˜๊ฒฝ์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๊ตฌ๊ธ€์˜ V8์„ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํฌ๊ฒŒ 2๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

Call Stack(ํ˜ธ์ถœ ์Šคํƒ)์ž‘์—…์ด ์š”์ฒญ๋˜๋ฉด(ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด) ์š”์ฒญ๋œ ์ž‘์—…์€ ์ˆœ์ฐจ์ ์œผ๋กœ Call Stack์— ์Œ“์ด๊ฒŒ ๋˜๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹จ ํ•˜๋‚˜์˜ Call Stack์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น task๊ฐ€ ์ข…๋ฃŒํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค๋ฅธ ์–ด๋–ค task๋„ ์ˆ˜ํ–‰๋  ์ˆ˜ ์—†๋‹ค.Heap๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๊ฐ€ ํ• ๋‹น๋˜๋Š” ์˜์—ญ์ด๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋‹จ์ˆœํžˆ ์ž‘์—…์ด ์š”์ฒญ๋˜๋ฉด Call Stack์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ๋œ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ๋ฟ์ด๋‹ค. ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ ๋™์‹œ์„ฑ(Concurrency)์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋น„๋™๊ธฐ ์š”์ฒญ(์ด๋ฒคํŠธ๋ฅผ ํฌํ•จ) ์ฒ˜๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊ตฌ๋™ํ•˜๋Š” ํ™˜๊ฒฝ ์ฆ‰ ๋ธŒ๋ผ์šฐ์ €(๋˜๋Š” Node.js)๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

 

Event Queue(Task Queue)๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜, ๋น„๋™๊ธฐ์‹ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, Timer ํ•จ์ˆ˜(setTimeout(), setInterval())์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์˜์—ญ์œผ๋กœ ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์— ์˜ํ•ด ํŠน์ • ์‹œ์ (Call Stack์ด ๋น„์–ด์กŒ์„ ๋•Œ)์— ์ˆœ์ฐจ์ ์œผ๋กœ Call Stack์œผ๋กœ ์ด๋™๋˜์–ด ์‹คํ–‰๋œ๋‹ค.Event Loop(์ด๋ฒคํŠธ ๋ฃจํ”„)Call Stack ๋‚ด์—์„œ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ task๊ฐ€ ์žˆ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  Event Queue์— task๊ฐ€ ์žˆ๋Š”์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ํ™•์ธํ•œ๋‹ค. ๋งŒ์•ฝ Call Stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด Event Queue ๋‚ด์˜ task๊ฐ€ Call Stack์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์‹คํ–‰๋œ๋‹ค.

function func1() {
  console.log('func1');
  func2();
}

function func2() {
  setTimeout(function () {
    console.log('func2');
  }, 0);

  func3();
}

function func3() {
  console.log('func3');
}

func1();

ํ•จ์ˆ˜ func1์ด ํ˜ธ์ถœ๋˜๋ฉด ํ•จ์ˆ˜ func1์€ Call Stack์— ์Œ“์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ func1์€ ํ•จ์ˆ˜ func2์„ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ํ•จ์ˆ˜ func2๊ฐ€ Call Stack์— ์Œ“์ด๊ณ  setTimeout๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. setTimeout์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์ฆ‰์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์ง€์ • ๋Œ€๊ธฐ ์‹œ๊ฐ„๋งŒํผ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ “tick” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํƒœ์Šคํฌ ํ๋กœ ์ด๋™ํ•œ ํ›„ Call Stack์ด ๋น„์–ด์กŒ์„ ๋•Œ Call Stack์œผ๋กœ ์ด๋™๋˜์–ด ์‹คํ–‰๋œ๋‹ค.

 

 

๋™๊ธฐ (Synchronous)์™€ ๋น„๋™๊ธฐ(Asynchronous)

  • ๋™๊ธฐ ๋ฐฉ์‹์€ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ์‘๋‹ต์ด ๋Œ์•„์™€์•ผ ๋‹ค์Œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ A์ž‘์—…์ด ๋ชจ๋‘ ์ง„ํ–‰ ๋ ๋•Œ๊นŒ์ง€ B์ž‘์—…์€ ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค.
  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์€ ๋ฐ˜๋Œ€๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ์‘๋‹ต ์ƒํƒœ์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ๋™์ž‘์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ A์ž‘์—…์ด ์‹œ์ž‘ํ•˜๋ฉด ๋™์‹œ์— B์ž‘์—…์ด ์‹คํ–‰๋œ๋‹ค. A์ž‘์—…์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค๋Š”๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋•Œ๋•Œ๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์ง€์—ฐ์ด ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค NOW. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค asynchronously.

 

https://poiemaweb.com/js-async

 

Asynchronous processing model | PoiemaWeb

๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ ๋ชจ๋ธ(Synchronous processing model)์€ ์ง๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฆ‰, ์ž‘์—…์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ์–ด๋–ค ์ž‘์—…์ด ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค์Œ ์ž‘์—…์€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€

poiemaweb.com

 

728x90

'Javascript > Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Js] ๋ฐฐ์—ด ์ƒ์„ฑ  (0) 2022.07.22
Bind  (0) 2022.07.19
[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž ์šฉ์–ด ์ฐจ์ด  (0) 2022.05.27
[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์ต๋ช…ํ•จ์ˆ˜, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ์ฝœ๋ฐฑํ•จ์ˆ˜  (0) 2022.05.22
[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] crazy this, ํ—ท๊ฐˆ๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ this ์˜ˆ์ œ ์ด์ •๋ฆฌ  (0) 2022.05.22
    'Javascript/Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Js] ๋ฐฐ์—ด ์ƒ์„ฑ
    • Bind
    • [์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž ์šฉ์–ด ์ฐจ์ด
    • [์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์ต๋ช…ํ•จ์ˆ˜, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ์ฝœ๋ฐฑํ•จ์ˆ˜
    Rainbow๐ŸŒˆCoder
    Rainbow๐ŸŒˆCoder
    ๋ชฐ๋ผ๋„ ๊ฒฐ๊ตญ์€ ์•„๋Š” ๊ฐœ๋ฐœ์ž, ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•œ ๋งค์ผ์˜ ํ•œ๊ฑธ์Œ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”