A simple guide to JavaScript concurrency in Node.js | TSH.io

싱글스레드인 Node.js에서 동시성 제어 이슈가 생기는 이유

Node.js는 싱글 스레드이다.


한 번에 하나의 요청을 처리하게된다. 즉, 단일 연산의 경우 동시성 문제는 발생하지 않는다.

그러나 비동기 API가 실행될 때, Libuv 라이브러리에서 추상화된 운영체제 쓰레드풀을 이용하게된다. 이 쓰레드풀은 단일 스레드가 아니기 때문에, 여러 요청이 동시에 들어올 경우 동시성 문제가 발생할 수 있다.

Thread pool work scheduling - libuv documentation

동시성 문제는 왜 생길까


“공유자원”에 대한 접근이 순차적으로 이루어져야하기 때문이다. 예를들어, 여러개의 비동기 작업이 동시에 DB에 쓰기 작업을 하려는 경우, 순차적으로 처리하여 데이터베이스의 일관성을 보장해야한다. 만약 동시에 임계영역에 여러 작업이 접근하게되면 “경쟁상태” 에 빠질 수 있다.

어떻게 구현할까

어떻게 테스트 할 수 있음?

Maximizing Node.js Performance with Thread Pools