A simple guide to JavaScript concurrency in Node.js | TSH.io
한 번에 하나의 요청을 처리하게된다. 즉, 단일 연산의 경우 동시성 문제는 발생하지 않는다.
그러나 비동기 API가 실행될 때, Libuv 라이브러리에서 추상화된 운영체제 쓰레드풀을 이용하게된다. 이 쓰레드풀은 단일 스레드가 아니기 때문에, 여러 요청이 동시에 들어올 경우 동시성 문제가 발생할 수 있다.
Thread pool work scheduling - libuv documentation
“공유자원”에 대한 접근이 순차적으로 이루어져야하기 때문이다. 예를들어, 여러개의 비동기 작업이 동시에 DB에 쓰기 작업을 하려는 경우, 순차적으로 처리하여 데이터베이스의 일관성을 보장해야한다. 만약 동시에 임계영역에 여러 작업이 접근하게되면 “경쟁상태” 에 빠질 수 있다.