동기적 프로그래밍
기능 A, B, C 가 연달아서 동작한다고 했을 때,
A가 끝나고 나서 B를, B가 끝나고 나서 C를 동작시키는 방식을 의미한다.
작업 순서가 순차적으로 일어나서 동작 결과를 예측하기 쉽다는 장점이 있다.
하지만, 앞의 작업 시간이 오래 걸리면 뒤의 작업이 늦어질 수 있다.
A가 100초 걸리고, B, C가 1초 걸리는 작업이면 비효율적으로 프로그램이 동작하게 된다.
비동기적 프로그래밍
기능 A, B, C가 연달아서 동작한다고 했을 때,
A가 끝날 때까지 B, C의 실행을 기다리지 않는다.
A가 실행하자마자, B, C의 작업이 실행된다.
작업 완료 순서를 예측하기 힘들다는 단점이 있지만,
작업이 끝나는 순서대로 작업을 완료할 수 있다는 장점이 있다.
자바스크립트 엔진은 싱글 쓰레드로 동작한다.
(with JS)
구조상 한번에 하나의 작업만 처리할 수 있는데,
비동기 작업이 일어날 때 (Web API, Ajax 등…),
일반적으로 비동기 함수를 브라우저에서 실행시키고,
비동기 함수의 콜백을 테스크 큐로 전달한다.
콜스택이 비었을 때, 이벤트 루프가 감지하여 테스크 큐의 콜백 함수들을 전달한다.
콜스택에서 콜백함수를 실행시킴으로써, 비동기 함수 작업을 완료시킨다.