https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/
Blocking은 Node.js 프로세스에서 추가 JavaScript 실행이 JavaScript가 아닌 작업이 완료될 때까지 기다려야 하는 경우입니다. 이는 Blocking 작업이 발생하는 동안 이벤트 루프가 JavaScript를 계속 실행할 수 없기 때문에 발생합니다.
JSON.stringfy
함수와 window.alert
는 Blocking 함수입니다.
해당 작업을 마쳐야 다음 작업을 수행할 수 있습니다.
const fs = require("fs");
const data = fs.readFileSync("README.md"); // blocks here until file is read
console.log(data);
// will run after console.log
Node.js 표준 라이브러리의 모든 I/O 메서드는 non-blocking 및 callback 함수를 허용하는 비동기 버전을 제공합니다. 일부 메서드에는 이름이 Sync로 끝나는 차단 상대도 있습니다.
fs.readFile("README.md", (err, data) => {
if (err) throw err;
console.log(data);
});
// will run before console.log
첫 번째 예는 두 번째 예보다 간단해 보이지만 두 번째 줄이 전체 파일을 읽을 때까지 추가 JavaScript 실행을 차단하는 단점이 있습니다. 동기식 버전에서는 오류가 발생하면 이를 잡아야 하며 그렇지 않으면 프로세스가 중단됩니다. 비동기 버전에서 표시된 대로 오류를 발생시켜야 하는지 여부는 작성자가 결정합니다.
fs.readFile("README.md", (err, data) => {
if (err) throw err;
console.log(data);
});
fs.unlinkSync("README.md");
위의 예에서 fs.unlinkSync()
는 실제로 읽히기 전에
README.md를 삭제하는 fs.readFile()
보다 먼저 실행될 가능성이 높습니다.
fs.readFile("README.md", (read_err, data) => {
if (read_err) throw read_err;
console.log(data);
fs.unlink("README.md", (unlink_err) => {
if (unlink_err) throw unlink_err;
});
});
위의 내용은 올바른 작업 순서를 보장하는 fs.readFile()
의 콜백 내에서
fs.unlink()
에 대한 non-blocking 호출을 배치합니다.