1.1.4 논블로킹 I/O
이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있습니다. 작업에는 두 가지 종류가 있는데, 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업입니다. 기본적으로 여러분이 작성한 자바스크립트 코드는 동시에 실행될 수 없습니다. 하지만 자바스크립트상에서 돌아가는 것이 아닌 I/O 작업 같은 것은 동시에 처리될 수 있습니다.
I/O는 입력(Input)/출력(Output)을 의미합니다. 파일 시스템 접근(파일 읽기 및 쓰기, 폴더 만들기 등)이나 네트워크를 통한 요청 같은 작업이 I/O의 일종입니다. 이러한 작업을 할 때 노드는 논블로킹 방식으로 처리하는 방법을 제공합니다. 논블로킹(non-blocking)이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미합니다. 반대로 블로킹(blocking)은 이전 작업이 끝나야만 다음 작업을 수행하는 것을 의미합니다.
▲ 그림 1-9 블로킹과 논블로킹
그림 1-9를 보면 블로킹 방식보다 논블로킹 방식이 같은 작업을 더 짧은 시간에 처리한다는 것을 알 수 있습니다. 다만, 작업들이 모두 동시에 처리될 수 있는 작업이라는 전제가 있습니다.