본문 바로가기

JavaScript/Node.js

[Node js] Blocking Code / Non-Blocking Code 란

<Blocking Code>

let fs = require("fs");

let data = fs.readFileSync("sample.txt");

console.log(data.toString());
console.log("프로그램이 종료 되었습니다.");

 

  • 위 예제는 Callback Function이 사용 되지 않는, Blocking Code 입니다.
  • 위 코드를 실행 해보면 파일을 읽고 텍스트를 출력 한 후 "프로그램이 종료 되었습니다." 로그가 찍힌다.
  • 즉, 파일을 찾고 읽고 toString() 하고 출력 후 "프로그램이 종료 되었습니다."가 순서대로 실행 된다.

<Non-Blocking Code>

let fs = require("fs");

// 모든 Node 어플리케이션의 비동기식 함수에서는 첫번째 매개변수로는 error를 받는다.
// 마지막 매개변수로는 callback function을 받는다.

fs.readFile('sample.txt', function (err, data) {
    if (err) {
    	return console.error(err);
    }
    
    console.log(data.toString());
});

console.log("프로그램이 종료 되었습니다.");

 

  • Blocking 예제와 같은 sample.txt 를 사용 하였다.
  • fs.readFile()함수는 비동기식으로 파일을 읽는 함수이다.
  • 도중에 에러가 발생하면 err객체에 에러내용을 담는다.
  • 에러 발생없이 정상적으로 처리 되면 파일 내용을 다 읽고 출력한다.
  • readFile() 메소드가 실행 된 후, 프로그램이 메소드가 끝날때 까지 기다리지 않는다.
  • console.log("프로그램이 종료 되었습니다."); 를 출력한다.
  • 그 후 메소드가 끝나서 console.log(data.toString()); 을 출력한다.

<프로그램이 끝난 시점은?>

  • readFile() 메소드가 실행 된 후 프로그램은 readFile() 이 끝날 때까지 기다리지 않고 console.log("프로그램이 종료 되었습니다.'); 를 출력 하였다.
  • 프로그램이 실질 적으로 끝난 시점은 console.log(data.toString()); 을 출력 후 이다.

 


<정리>

Non-Blocking 을 사용하는 서버는 Blocking 을 사용하는 서버보다 더 많은 양의 요청을 빠르게 처리할 수 있다.

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

[Node js] 콜백 함수(Callback Function)란  (0) 2022.01.04