본문 바로가기

Node.js/1. node.js 란?

1-2 node.js의 특징. event-driven, non-blocking I/O , 단일 스레드


node.js의 특징인 event-driven, non-blocking I/O , 단일 스레드 에 대한 간략한 설명입니다. 


1. event-driven

event-driven은 사용자가 이벤트를 발생시켰을때 즉 마우스/키보드로 데이터를 전송 했을때에만 작동합니다. 대부분의 웹서버는 사용자가 이벤트를 발생하기 까지 기다립니다. 즉 이벤트가 발생하기까지 자원(대기 시간 및 메모리)을 계속 소비하게 됩니다. 하지만 event-driven는 이벤트에만 웹서버가 연결해주기 때문에 자원을 최소화 시킬수 있습니다.  


2. non-blocking I/O

blocking I/O(동기식 I/O) 은 쓰기/읽기 이벤트가 발생하면 이벤트가 끝날때까지 해당 모듈을 점유하게 됩니다. 즉 다른 일을 못하게 되지요. 또한 메모리버퍼에 데이터를 차지하게 되므로 메모리도 소비하게 됩니다. 하지만 non-blocking I/O(비동기식 I/O)의 경우 쓰기/읽기 이벤트가 시작하자마자 모듈을 반환시켜 다른 작업을 하도록 준비상태로 됩니다. 속도가 동기식보다 빠르고 메모리도 덜 차지하게 됩니다.


3. 단일 스레드



단일스레드의 장점은 적은양의 자원으로 일을 처리할수 있습니다.  위의 그림에서 event loop 가 하나만 작동하듯 하나의 몸으로 한가지 일만 합니다. 멀티스레드라면 몸을 여러개로 쪼개서 일을 한다음 일의 결과를 합쳐야 합니다. 이때 일에 대한 점유문제와 해당 일을 쪼개고 합치는 작업이 더해저 자원을 더 사용합니다. 단일 스레드의 가장 큰 단점은 한번에 한가지 밖에 작동을 못합니다.[각주:1] 만일  어느 한곳에 예외상황 및 에러가 발생 한다면 어플리케이션 전체에 영향이 가게 됩니다. 


읽어볼 좋은 글.

outsider님의 node.js  서버사이드개발하기 : http://www.slideshare.net/rockdoli/nodejs-8492796



  1. 예외적으로 cluster모듈을 사용한다면 멀티스레드의 효과를 볼수 있습니다. [본문으로]