Javascript는 동기적이고, blocking
이며, single-thread
로 동작하는 언어이다.
Sync와 Async는 대상과 시간이 어떻게 다루어지는 지를 확인해야 한다.
Javascript는 single-thread
, 동기적 언어이다. 하지만 비동기 작업을 처리하기 위한 방법(web API)가 존재하는 것이다.
Javascript engine = Memory heap + call stack
Javascript runtime environment = javascript engine + event loop + Web API + callback queue + render queue
Blocking과 Non-Blocking은 직접 제어할 수 없는 대상을 처리하는 방법에 따라 나눈다.
직접 제어할 수 없는 대상은 대표적으로 IO, 멀티쓰레드 동기화가 있다.
Javascript는 기본적으로 blocking 이지만, 비동기 작업에 대해서는 Non-blocking로 동작하게 할 수 있다.
blocking 메서드는 동기로 실행되고 non-blocking 메서드는 비동기로 실행된다. Node.js 표준 라이브러리의 모든 I/O 메서드는 논블로킹인 비동기 방식을 제공하고 콜백 함수는 받는다. 일부 메서드는 같은 작업을 하는 블로킹 메서드도 가지는데 이는 이름 마지막에 Sync
가 붙는다.