그전에 우선 알아야할 개념들이 좀 있다.
CPU Bound
I/O Bound
Event Loop
클라이언트에서 요청이 들어오면 Event Queue에 담긴다. 그리고 싱글쓰레드(한번에 하나씩만 처리 할 수 있음)인 Node.js에서는 Event Loop가 돌아가면서 순차적으로 Event Queue에 담긴 요청들을 하나씩 처리를 하는데, 이때 만약 시간이 오래 걸리는 요청이나 조금 무거운 요청들이 들어오게 되면 한번에 하나씩만 처리를 할때 전체 요청들을 다 처리하려면 시간이 너무 오래 걸리기때문에 다른 요청들에 영향을 주게 된다.
여기서 이러한 문제점을 해결하기 위해 비동기의 개념이 등장하는데, Event Loop는 시간이 오래 걸리거나 조금 무거운 요청들은 멀티스레드풀(워커스레드)에 요청을 넘기고 바로 다음 요청으로 넘어간다. 멀테스레드풀(워커스레드)은 전달받은 요청을 처리하고 콜백으로 다시 Event Loop에게 알려주고 그 사이 Event Loop는 또 다른 요청들을 처리하게 되어서 시간이 오래 걸리거나 조금 무거운 요청이 들어오게 된다 하더라도 싱글스레드에서 비동기적 개념이 적용되기에 이러한 문제점들을 해결할 수 있는것이다.