티스토리 뷰

728x90

[JS] NodeJS Server의 특징과 단일 스레드인 이유


면접 질문 중에는Tomcat Server와 NodeJS Server의 차이를 묻는 경우가 있다.

두 서버는 서로 차이가 있다.

Tomcat Server는 멀티 스레드를 가지고 사용자 응답에 반응하지만,

NodeJS Server는 단일 스레드를 가지고 사용자 응답을 처리한다.(내부는 멀티 스레드)


멀티 스레드인 경우 Stack을 제외한 Code, Data, Heap 메모리를 공유하므로,

스레드간 Switching 비용이 단일 스레드에 비해서 빠르다.

하지만, 모든 스레드가 작업중인 경우 추가 작업을 받을 수 없다.

그래서 정해진 갯수의 사용자 요청에 대해서 응답을 처리하는 동안 받는 작업은 대기 해야한다.


단일 스레드인 경우 멀티 스레드보다 요청 처리를 위한 Context Switching 비용이 크다.

하지만, 이벤트 큐를 따로 둬서 각 작업을 순서대로 계속 진행한다. (Event Callback 방식)

외부의 요청을 받는 것은 단일 스레드에서 계속 받아서 이벤트 큐에 집어넣고,

내부는 멀티 스레드로 처리하고 Callback으로 진행하므로, 많은 요청에 대해서도 순차적인 처리가 가능하다.




그런데 왜? NodeJS Server가 단일 스레드인 것일까? 

그 이유는 자바스크립트를 동작시키는 V8 엔진에서 멀티 스레딩을 지원하지 않기 때문이다.


Node.js is restricted to event-only processing due to the lack of v8 multithreading support. Well, javascript language itself lacks the needed features, so any implementatio will end up being tricky. That's the main culprit of Node.js, In my opinion. In other languages you can choose what you want. Or some hybrid of both models, like java NIO.




[출처]

https://plus4070.github.io/nhn%20entertainment%20devdays/Node.js_EventHandling.html

https://stackoverflow.com/questions/17959663/why-is-node-js-single-threaded


728x90

'공부' 카테고리의 다른 글

[Linux] shell alias  (0) 2018.10.08
[DS] Heap?  (0) 2018.10.04
[Security] Same-Origin-Policy & Cross-Origin-Resource-Sharing  (0) 2018.10.01
[keyword] 결합도 & 응집도(Coupling & Cohesion)  (1) 2018.09.28
[CSS] CSS selector  (0) 2018.09.26
댓글