Node.js

[node.js] 특징

behonestar 2015. 5. 5. 14:47

논블록킹 I/O, 이벤트 루프 기반의 비동기 I/O


노드의 I/O는 모두 논블록킹 I/O이다. 이로인해 노드는 상당히 빠른 성능을 보여준다.

노드의 I/O는 이벤트 루프를 기반으로 비동기로 실행된다. 따라서 I/O의 결과를 콜백 함수의 파라미터로 전달 받는다.


예제

var server = require('http');

server.createServer();


server.on('request', function(req, res){});

server.listen(3000, 'localhost');

console.log('서버가 시작되었습니다.');


설명

  1. server.on('request')에서 request 이벤트에 콜백 함수 등록
  2. request 이벤트가 발생하면 이벤트 루프가 감지하여 콜백 함수를 실행



싱글 스레드


코드를 실행하는 스레드가 오직 하나뿐이기 때문에 동시성에 대한 고민을 할 필요가 없다. 싱글 스레드는 개발자가 작성한 코드만 동기로 실행하고 그 외 모든 I/O는 비동기로 실행한다. 비동기로 실행한 I/O가 완료됐다는 이벤트가 발생해도 현재 스택에 존재하는 이벤트를 먼저 처리한 후에 다음 이벤트를 처리한다.


참고로 사용자의 코드를 처리하는 스레드는 하나이지만 내부적으로는 여러개의 스레드가 존재할 수 있다. 예를 들어 사용자의 코드를 처리하는 동안에도 I/O 작업은 병렬적으로 처리될 수 있다. 이런 작업은 노드 내부에서 처리되므로 개발자는 싱글 스레드만 신경쓰면 된다.


단점

  1. 현재 스레드가 처리 중인 작업이 CPU 처리량이 많아 오래 걸리면 다른 이벤트가 처리되지 않는다.
  2. 스케일업(CPU, 메모리 향상)으로 성능이 크게 향상되지 않는다. CPU의 속도가 빨라진다면 노드도 빨라지겠지만 싱글 스레드를 사용하는 노드는 CPU 개수나 메모리 용량에는 큰 영향을 받지 않는다. 이 문제는 노드 인스턴스를 여러 개 실행해 인스턴스 간의 메시지 통신을 통해 해결할 수 있다.


'Node.js' 카테고리의 다른 글

[node.js] HTTP Digest 인증  (0) 2015.05.09
[node.js] 이벤트  (0) 2015.05.05
[node.js] HTTP 동시 접속 성능 테스트  (0) 2015.05.05
[node.js] require() 그리고 module.exports  (0) 2015.05.05
[node.js] 시작하기  (0) 2015.04.20