๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2023. 12. 1.

Syncronous & Asychronous

 

1. ์ผ๋ฐ˜์ ์ธ ๋งฅ๋ฝ์—์„œ์˜ ๋™๊ธฐ(Sync)

์˜์ƒ์„ ๋ณด๋‹ค๊ฐ€ ์ž๋ง‰์ด ์˜์ƒ๋ณด๋‹ค ๋น ๋ฅด๊ฑฐ๋‚˜ ๋Šฆ๊ฒŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ, '์‹ฑํฌ(Sync)๊ฐ€ ์•ˆ ๋งž๋Š”๋‹ค' ๋ผ๋Š” ๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๋น„๋™๊ธฐ(Asychronous)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์ด๋•Œ์˜ ์‹ฑํฌ๋Š” Sync๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, sysnchronous์˜ ์ค„์ž„๋ง๋กœ์„œ, '๋™๊ธฐ'ํ˜น์€ '๋™์‹œ์— ์ผ์–ด๋‚˜๋Š”, ํ•œ ๊ฐ€์ง€ ๋™, ๊ธฐ๋‹ค๋ฆด ๊ธฐ)' ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ๋™๊ธฐ(Sync)์™€ ๋น„๋™๊ธฐ(Async)

๋™๊ธฐ, Synchronous

 

์ด์ „ ์ž‘์—…์ด ๋‹ค ์ˆ˜ํ–‰๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋‹ค์Œ ์ž‘์—…์€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋‹ค์Œ ์ž‘์—…์€ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์ด๋ฅผ (Blocking) ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

ex) ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ™”๋ฉด์ด ์ƒˆ๋กœ๊ณ ์นจ ๋˜๋ฉด์„œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ ๋˜์–ด์•ผ ํ•  ๋•Œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ํ™”๋ฉด์ด ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

๋น„๋™๊ธฐ, Asynchronous

 

์ด์ „ ์ž‘์—…์˜ ์ˆ˜ํ–‰ ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ๋‹ค์Œ ์ž‘์—…์€ ๊ฐœ๋ณ„๋กœ ์ˆ˜ํ–‰(Non-Blocking)

 

๋น„๋™๊ธฐ ๋ฐฉ์‹์€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ๋Œ€์‹  ๋™๊ธฐ ๋ฐฉ์‹์— ๋น„ํ•ด ๊ฒฐ๊ณผ ํ•˜๋ฉด์ด ๋‚˜์˜ค๋Š” ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

 

 

 

// ์ฝ”๋“œ๋กœ ๋ณด๋Š” ๋™๊ธฐ ๋น„๋™๊ธฐ

 

๋™๊ธฐ์  ๋น„๋™๊ธฐ์ 
ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ƒ ์•ˆ ํ•˜๋ƒ์— ๋”ฐ๋ผ ๋‚˜๋ˆˆ๋‹ค,

call stack, task queue ์ด๋•Œ task queue๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•  ๋•Œ ์˜ˆ๋ฅผ๋“ค์–ด API์ธ setTimeout ์•ˆ์— first ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด callback์—์„œ ๋ฐ”๋กœ task queue๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

ex) function first() { console.log('first() called'); }
function second() { setTimeout(() => console.log('second() called'), 1000); }
function third() { console.log('third() called'); }

first();
second();
third();

//
//ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์ด ์•„์ง ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๊ณ  ํ•ด๋„, ๋‹ค์Œ ์ž‘์—…์„ ๊ณง๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹


function first() {
    console.log('first() called');
}

function second() {
    console.log('second() called');
}

setTimeout(first, 3 * 1000);
second();

//
function first() {
    console.log('first() called');
}

function someLongWork() {
    console.log('์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—… ์ˆ˜ํ–‰ ์ค‘...');
}

function second() {
    console.log('second() called');
}

first();
someLongWork();
second();

 

์‹ค์Šต ๋งํฌ

https://www.jsv9000.app/

๋Œ“๊ธ€