IT/node.js
node.js, single thread 아닌가요?
내일은교양왕
2024. 5. 3. 08:39
Activity monitor에서 node 프로세스를 확인해보니 쓰레드가 11개가 있다고 나옵니다.
우리가 여태까지 node.js는 single thread로 동작한다고 알고 있었는데요. 확인해보니 11개이네요.
이유를 한번 살펴보도록 하겠습니다.
우리가 작성한 코드들은 single thread로 동작한다는건 변함이 없습니다. 다만, node.js 자체를 구동하기 위해서는 single-thread는 아닙니다.
Event loop and Worker threads
우리가 작성한 코드는 single thread로 동작하는 반면, node.js는 non-blocking i/o operation을 위해 multi thread를 사용합니다. 이러한 operation은 가능하면 system' kernel에 떠넘기지려고합니다. 하지만 못할 경우 node.js가 pool of worker threads를 사용합니다. 이 worker thread들은 file, network 요청 또는 blocking으로 간주되는 어떠한 task들을 읽고 쓰는 작업들을 다룹니다.
Libuv Library
node.js 는 non-blocking I/O model를 다루는 libuv library를 사용합니다. 이 library 자체에서 thread pool을 구현하고 있습니다.
V8 and Garbage Collection
V8 engine과 garbage collection에서 그들의 역활을 수행하기 위해 multi thread를 생성할 수 있습니다.