동기 방식은 손님이 주문을 하고 >> 커피가 나올 때 까지 기다려서 >> 커피를 받아야 한다.
비동기 방식은 우선 주문을 받고 >> 손님은 커피가 나오는 순서를 신경쓰지 않고 >> 진동벨이 울리면 커피를 받는다.
실제 카페에서는 겉보기에 "주문을 순서대로 처리하는" 동기 방식처럼 보인다.
사실 비동기와 더 닮아있다고 볼 수 있다.
여러명의 바리스타가, 각각 주문을 처리하면서 순서가 달라질 수 있다.
동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있다.
비동기방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있다.
A의 계좌에서 10,000원이 출금된다.
A의 계좌로부터 B의 계좌로 돈이 전달된다.
B의 계좌에 돈이 10,000원이 추가된다.
A의 계좌에 돈이 이체된 사실이 전달된다.
A와 B의 계좌에서 10,000이 차감/증감된다.
학생들이 시험 문제를 푼다
시험을 푼 학생은 각자 시험지를 제출한다.
학생들의 담임은 완료된 시험지부터 채점을 한다.
채점이 완료된 시험지는 각 학생에게 전달된다.
각 학생은 자신의 시험 결과를 확인한다.
block (블록)
상태라고 할 수 있고, 대기하지 않고 본인의 다른 할 일을 하고 있다면 nonblock (논블록)
상태라고 할 수 있다.자바스크립트는 동기 방식으로 코드를 해석하고, 기본적으로 코드를 순차적으로 처리한다.
하지만 비동기적으로 동작을 실행시킬 수 있는데, 자바스크립트의 런타임 환경이 기본적으로 여러 작업이 동시에 실행될 수 있게 구성이 되어있기 때문이다.
자바스크립트의 동작 방식 중 "이벤트 루프 (loop)" 이라는 것이 있다.
자바스크립트는 동기적으로 작업을 수행하지만, 이벤트 루프 덕분에 비동기 작업을 수행할 수 있다.
console.log("Hello");
// 1. 순차적으로 실행되기 때문에 콘솔에 가장 먼저 출력된다.
setTimeout(() => {
console.log("James");
}, 1000);
// 2. 따로 작업이 가능하기 때문에 이벤트 루프로 전달되고, 이벤트 루프에서 작업이 실행된다.
// 4. 1초 후에 콜백 함수가 실행되기 때문에 이벤트 루프에서 이 작업이 끝날 때 "James"가 콘솔에 출력된다.
console.log("World");
// 3. 위의 명령이 "따로" 실행되기 때문에 순서가 이쪽으로 넘어와서 콘솔에 "World"가 출력된다.
자바스크립트의 엔진이 어떻게 돌아가는지, 또 어떻게 구성이 되어 있는지를 알아야 왜 기본적으로 동기적 처리를 하는 자바스크립트가 비동기적으로 코드를 실행시킬 수 있는지 이해할 수 있다.
일단 가볍게 이벤트 루프까지 설명이 되었고, 앞으로 추가적으로 필요한 내용을 정리해야겠다.
자바스크립트만 공부했지만 다른 언어들도 이렇게 복잡할지 심히 걱정된다...🫠
자료 출처: