본문 바로가기

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가 하나만 작동하듯 하나의 몸으로 한가지 일만 합니다. 멀티스레드라면 몸을 여러개로 쪼개서 일을 한다음 일의 결과를 합쳐야 합니다. 이때 일에 대한 점유문제와 해당 일을 쪼개고 합치는 작업이 더해저 자원을 더 사용합니다. 단일 스레드의 가장 큰 단점은 한번에 한가지 밖에 작동을 못합니다. 만일  어느 한곳에 예외상황 및 에러가 발생 한다면 어플리케이션 전체에 영향이 가게 됩니다. 

 

- 이벤트 루프 : 이벤트 발생시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역활

- 이벤트 큐 (테스크 큐): 이벤트 발생 후, 타이머나 이벤트 리스너의 콜백 함수를 보낸다. 정해진 순서대로 줄을 서 있어서 큐로 되어 있다. (특정한 경우 순서가 바뀔수 있다.)

- 스레드풀(백그라운드) : 리스터들이 대기하는 장소, 여러 작업이 동시에 실행될수 있다.

 

 

 

읽어볼 좋은 글.

 

 

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

 

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

'Node.js > 1. node.js 란?' 카테고리의 다른 글

1-5. Node.js 이벤트 루프  (0) 2025.01.07
1-4. 콜백 지옥  (0) 2025.01.06
1-3 node.js의 단점!  (0) 2025.01.06
1-1 node.js 는 무엇일까요?  (1) 2014.02.13