[JS] 동기(synchronous)와 비동기(asynchronous)

2025. 1. 17. 14:21·Front-end/Javascript

동기(synchronous)

출처: nbsp;https://poiemaweb.com/js-async

실행 시점과 작업이 완료되는 시점이 반복되면서 순차적으로 실행이 된다

블로킹 코드 = 작업이 실행되는 동안 다른 작업의 진행을 막는 방식

 

 

동기 방식은 요청을 보낸 후 결과를 기다리는 방법으로, 이전 작업이 완료 되기 전까지 다음 작업을 실행할 수 없다

여러 요청을 동시에 처리할 수 없고, 요청의 순서에 따라 처리된다.

 

예를 들어, 커피를 주문하는 과정을 생각해보자.

커피를 주문하는 사람이 있고, 주문을 받는 사람이 있다.

아이스 아메리카노 한 잔이라는 주문이 들어왔을 때, 바로 음료를 만들어 주문을 한 사람에게 전달한다.

'주문이 들어왔을 때, 바로 음료를 제작하는 것' 이게 바로 동기 방식이다.

console.log("손님1 커피 주문");
console.log("손님1 커피 제조 시작");
console.log("손님1 커피 제조 완료");

console.log("손님2 커피 주문");
console.log("손님2 커피 제조 시작");
console.log("손님2 커피 제조 완료");

 

동기 방식은 즉각적으로 값이 나오는 상황일 때 사용한다.

ex) 대부분의 계산 로직

 

 

비동기(asynchronous)

이전 작업이 완료 되는 것을 기다리지 않고 다른 작업을 동시에 처리할 수 있다

논블로킹 코드 = 작업이 실행되는 동안 다른 작업의 진행을 막지 않는 방식

 

비동기 방식은 작업의 완료 여부를 기다리지 않고 다른 작업을 실행할 수 있는 방식으로 작업이 독립적으로 실행된다.

 

즉, 작업의 실행 시점과 작업의 완료 시점이 다르다.

 

또 다시 커피 주문으로 생각해보자.

이번에는 커피를 주문하는 사람, 커피 주문을 받는 사람, 음료를 제조하는 사람이 있다.

아이스 아메리카노 주문을 받게 되면, 주문을 한 사람에게 진동벨을 건네준다.

이후, 음료를 제조하는 사람에게 아이스 아메리카노를 만들어 달라고 부탁한다.

주문을 받는 사람은 다음 주문을 바로 받을 수 있게 되고, 주문을 하는 사람은 진동벨이 울릴 때까지 기다리면 된다.

console.log("손님1 커피 주문");
console.log("손님1 커피 제조 시작");
setTimeout(() => {
	// 손님1 커피 제조 진행중...
  console.log("손님1 커피 제조 완료");
}, 2000); // 2초 후에 실행

console.log("손님2 커피 주문");
console.log("손님2 커피 제조 시작");
// ...

 

비동기 방식은  I/O 작업이나 네트워크 요청과 같이 시간이 오래 걸리는 작업에 유용하다

프로그램 작업을 하고 있을 때, 다른 작업들을 처리할 수 있기 때문에 전체적인 성능이 향상된다.

 

 

동기와 비동기의 관계

우선 순위 : 동기 > 비동기 (Promise > timer)

🌟 모든 동기 함수가 실행한 뒤에 비동기 함수가 실행된다.

비동기 함수 내에서는 Promise가 timer보다 우선이 된다.

 


[참고자료]

https://won-percent.tistory.com/150

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Front-end > Javascript' 카테고리의 다른 글

[JS] 단축 평가(Short Circuit Evaluation)  (1) 2025.01.20
[JS] 구조 분해 할당(Destructuring)  (1) 2025.01.20
[JS] DOM 조작하기  (2) 2025.01.15
[JS] fetch에 대해 알아보자  (0) 2025.01.10
[JS] addEventListener + 이벤트 종류  (1) 2025.01.10
'Front-end/Javascript' 카테고리의 다른 글
  • [JS] 단축 평가(Short Circuit Evaluation)
  • [JS] 구조 분해 할당(Destructuring)
  • [JS] DOM 조작하기
  • [JS] fetch에 대해 알아보자
집으로 감자
집으로 감자
Hello World
  • 집으로 감자
    Potato to Home
    집으로 감자
  • 전체
    오늘
    어제
  • 링크

    • Github
    • 분류 전체보기
      • Front-end
        • TIL
        • Javascript
        • Typescript
        • React
        • Next.js
        • CSS
        • 라이브러리
      • Algorithm
        • 프로그래머스: 기초 트레이닝
        • 프로그래머스 LV1
      • TroubleShooting
      • Problem & Solution
      • Project
      • Programing Knowledge
        • 개발 용어
        • CS
        • 운영체제
        • 자료구조
        • 데이터 베이스
  • 태그

    CSS
    tanstackquery
    http
    styledcomponent
    회고
    Til
    JavaScript
    코딩테스트
    react
    반응형웹
    실행컨텍스트
    문제해결
    트러블슈팅
    개발용어
    프로그래머스
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
집으로 감자
[JS] 동기(synchronous)와 비동기(asynchronous)
상단으로

티스토리툴바