동기(synchoronous)는 동시에 일어난다는 뜻이다. 그래서 한 작업이 일어나면, 해당 작업의 결과를 얻어야 다음 작업으로 진행된다는 뜻이다.
비동기(asynchoronous)는 동기 실행과 반대의 의미이다. 비동기 실행은 한 작업이 일어나면, 해당 작업의 결과를 기다리는 것이 아니고, 다음 작업을 진행한다. 다음 작업 진행 중 전 작업의 결과를 받으면 그 때 처리해준다. 이때 전 작업의 결과를 처리해주는 함수를 콜백 함수라고 부른다. 비동기 프로그래밍은 결과가 나올 때까지 다른 작업을 해도 됨으로 동기 실행에 비해 실행시간이 단축된다.
nodejs에서는 비동기 프로그래밍을 권장한다. node.js는 parent thread가 전체 코드의 실행을 담당하고, callback함수가 나올 때, 해당 작업은 child thread를 생성하여 담당하게 한다.
etc파일에 hello.c라는 글이 들어있다고 가정.
const fs = require('fs');
console.log('Start');
let content = fs.readFileSync('./etc', 'utf8');
console.log(content);
console.log('End');
Start
hello.c
End
const fs = require('fs');
console.log('Start');
fs.readFile('./etc', 'utf8',(err,result) =>{
console.log(result);
});
console.log('End');
Start
End
hello.c
위에서 설명한 node.js로 개발할 때는 parent thread에 부하가 되는 작업을 요청하면 안된다. 예를 들어, 고화질 이미지 처리, 복잡한 시뮬레이션 계산,딥러닝 작업 등이 존재한다.