비동기 방식을 이용하는 이벤트 기반 입출력 모델(Event Driven, Non-blocking I/O model)
가볍다, 효율적이다
많은 데이터를 주고받는 실시간 프로그램에서 큰 효과가 발휘된다
Chrome과 사용하는 것이 궁합에 맞다
기존의 인터프리터(코드 한 줄씩 해석)방식에선 속도 저하가 발생하였었음
크롬의 *V8엔진은 JS코드를 native코드로 변환하여 실행하여 속도가 향상됨
server동작을 주로 함 (socket, HTTP프로토콜을 통한 데이터 송수신 기능을 포함함)
*V8엔진
필요한 기능을 병렬로 실행하는 ‘thread pool’ & 이벤트를 받아 처리하는 ‘event loof’ 존재
네트워킹 기능을 담당하는 Socket, http 라이브러리 존재
표준 라이브러리 구현
위의 서술한 라이브러리를 사용하고 싶다면 JS기반 프로그램을 만들면 됨
⚑ 동기와 비동기
비동기(nonBlocking)
작업 동시 처리
file.read("a.text", fuction (contents) {
doShow(contents);
});
// file.read()가 실행된 직후, doAdd()도 같이 실행
var result = doAdd(10, 10);
file.read() 함수 실행시 파라미터로 파일 하나와 함수를 보냄
a.text 파일 : 이 파일을 읽어라
function(contents): 읽기 작업이 끝나면 이 함수를 실행하라 *callback()
doAdd()는 읽기작업이 끝나기 전에도 호출되어 계산작업이 진행됨
즉, 읽는 중 → (계산 중 →) 읽는게 다 끝났으면 보여줌
동기(Blocking)
작업 순차 처리
var contents = file.read("a.txt");
// contents 변수에 a.txt가 다 읽어와질 때까지 대기
doShow(contents);
// contents변수작업이 다 끝난다면 doAdd함수를 통해 result의 덧셈계산이 작동
var result = doAdd(10, 10);