Blocking & Non-Blocking code
1. Blocking Code
: 프로그램이 메서드가 끝날 때까지 대기를 한 후 다음 명령어로 진행이 됩니다.
- Blocking 예제 코드
// input.txt
Let's understand what is a callback function.
What the HELL is it?
// main.js
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("Program has ended");
결과를 확인하면,
$ node main.js
Let's understand what is a callback function.
What the HELL is it?
Program has ended
위의 결과로 확인해보시면, 텍스트를 출력하고 나서 프로그램이 종료되었다는 문구를 출력합니다.
2. Non-Blocking Code
: 함수가 실행될 때, 프로그램이 함수가 끝날때까지 기다리지 않고 바로 그 아래에 있는 코드들을 실행하게 됩니다. 그다음에 함수에 있던 작업이 다 끝나면 콜백 함수를 호출합니다.
- Non-Blocking 예제 코드
// main.js
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("Program has ended");
결과를 확인하면,
Program has ended
Let's understand what is a callback function.
What the HELL is it?
readFile() 메서드가 실행이 먼저 된 후 프로그램이 메서드가 끝날때까지 대기하지 않고 곧바로 다음 명령어로 진행하였기 때문에, 프로그램이 끝났다는 메시지를 출력 한 후에, 텍스트 내용을 출력했습니다.
프로그램이 끝나고나서 텍스트 내용을 출력한 것은 아닙니다. 프로그램이 실질적으로 끝난건 텍스트가 출력된 후입니다. 만약에 readFile() 다음에 실행되는 코드가 그냥 console.out() 이 아니라 readFile() 보다 작업시간이 오래 걸리는 코드였다면 텍스트 출력을 먼저 하게 될 겁니다.
callback 함수를 사용하여 이렇게 프로그램의 흐름을 끊지 않음으로써 Non-Blocking 코드를 사용하는 서버는 Blocking 코드를 사용하는 서버보다 더 많은 양의 요청을 빠르게 처리 할 수 있게 됩니다.
참고 글: Callback Function 개념
'Programming 개발은 구글로 > Web[프론트엔드&백엔드]' 카테고리의 다른 글
[Web] Node.js - HTTP 서버 및 클라이언트 예제로 확인하기 (0) | 2022.07.08 |
---|---|
[Web] React 프로젝트 생성 시 보안 오류인 PSSecurityException, UnauthorizedAccess 에러 발생 (0) | 2022.07.06 |
[Web] Redux(리덕스) 시작하기 (0) | 2022.07.04 |
[Web] Moden JS - 변수와 상수, 데이터 타입 (0) | 2022.06.30 |
[Web] React Hooks - useState, useEffect 등 (0) | 2022.06.29 |
댓글